在函数内多次调用另一个JS函数会导致错误

时间:2012-12-29 05:56:47

标签: javascript html html5 debugging

在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>

2 个答案:

答案 0 :(得分: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()函数。

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

<强>更新

为了澄清,这个问题不仅限于严格的全局变量 - 它只是函数名称范围的一般问题。当函数声明为function name(){...}时,该名称在函数及其父函数中具有范围。就在这里,父上下文恰好是全局上下文。

答案 1 :(得分:0)

只需将“功能因子(b)”的变量因子更改为factorial1之类的其他因子。变量名与函数名

冲突
    function factorial(b)
{
factorial1=1;
for(b; b > 1; b--)
{
factorial1 =b*factorial1;
}
return factorial1;
}