0

在 alg() 函数中取消注释 //fn 并运行代码,它将不再返回 0 导致此错误的原因是什么?我不能在另一个函数定义中多次调用一个函数吗?

<!DOCTYPE html>
<html>

<script>
function factorial(b)
{
factorial=1;
for(b; b > 1; b--)
{
factorial =b*factorial;
}
return factorial;
}
function alg(n, k)
{


 fk = factorial(k);
 //fn=factorial(n);


return 0;


}


</script>


<body>
<script>
write=alg(5,2);

document.write(write);
</script>

4

2 回答 2

1

问题在于,factorial显然应该是factorial()函数内部的局部变量的变量没有被声明为局部变量。修复只是使用var关键字声明它:

function factorial(b)
{
    var factorial=1;
    for(b; b > 1; b--)
    {
        factorial =b*factorial;
    }
    return factorial;
}

没有在函数factorial范围内声明为局部变量factorial()factorial只引用factorial()函数对象,它具有全局范围,因为它是使用function factorial(){...}脚本顶层的语法声明的。

所以当里面的代码factorial()改变这个factorial引用指向一个数字值时,第二次factorial()调用将失败,因为全局变量factorial现在指向一个数字,而不是factorial()函数。

全局变量被广泛认为是javascript的坏处之一。这是一个很好的例子!

更新

For clarification, this issue is not confined to strictly global variables - it's just a general issue of function name scope. When a function is declared like function name(){...} that name has scope within the function and its parent. It's just that here, the parent context happens to be the global context.

于 2012-12-29T20:15:20.340 回答
0

只需将“函数阶乘(b)”的变量阶乘更改为其他类似阶乘1。变量名与函数名冲突

    function factorial(b)
{
factorial1=1;
for(b; b > 1; b--)
{
factorial1 =b*factorial1;
}
return factorial1;
}
于 2012-12-29T06:22:57.920 回答