这让我昨天在递归函数中遇到了奇怪的行为。我设法繁殖,也注意到其他行为。基本上,下面html/js中的i变量似乎是全局的。输出是4,然后是5。我用FF 40.0.2。同样的问题在上周最新版本的Node.js中也出现了。我没有记下它的版本号
给了什么?它应该是这样的吗?如果在每个for语句的上方声明循环变量,问题就解决了。
<head>
<script>
function foo(recurse)
{
if (recurse)
{
for (i = 0; i < 2; ++i)
{
foo(false);
console.log(i);
}
}
else
{
for (i = 0; i < 4; ++i)
{}
}
}
foo(true);
</script>
</head>
预期输出:0
1
实际输出:4
不确定该标记什么
问题是你没有声明它们,所以它们是隐式全局的。使它们为var
s:
function foo(recurse) {
if (recurse) {
for (var i = 0; i < 2; ++i) {
// ^^^
foo(false);
console.log(i);
}
} else {
for (var i = 0; i < 4; ++i) {}
// ^^^
}
}
foo(true);
你也可以尝试严格模式,在那里你会得到一个未处理的错误Assignment to unresolved reference in strict mode code: i