这让我在昨天绊倒了,我在递归函数中有奇怪的行为。我设法重现并注意到其他行为。基本上,下面的html / js中的 i 变量似乎是全局的。输出为4,然后是5.我使用FF 40.0.2。截至上周(ish),最新版本的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
不确定要标记此内容。
答案 0 :(得分:1)
嗯,问题是你没有声明 他们,所以他们是implicitly global。让他们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);
你也可以尝试strict mode,在那里你会得到一个未处理的错误Assignment to unresolved reference in strict mode code: i
。