在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>
答案 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;
}