gpt4 book ai didi

javascript - for 语句中声明的变量似乎是全局的

转载 作者:行者123 更新时间:2023-12-03 09:10:20 26 4
gpt4 key购买 nike

昨天这让我绊倒,我在递归函数中出现了奇怪的行为。我成功地重现了并且还注意到了其他行为。基本上,下面 html/js 中的 i 变量似乎是全局的。输出是 4,然后是 5。我使用 FF 40.0.2。截至上周,最新版本的 Node.js 中也出现了同样的问题(ish)。我没有记下它的版本号。

什么给了?它应该像这样吗?我在每个 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

不确定要标记什么。

最佳答案

好吧,问题是您没有声明它们,所以它们是implicitly global 。让它们vars :

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

关于javascript - for 语句中声明的变量似乎是全局的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32091341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com