在for语句中声明的变量似乎是全局的
variables declared in for-statments appear to be global
这让我昨天在递归函数中遇到了奇怪的行为。我设法繁殖,也注意到其他行为。基本上,下面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
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 从Javascript方法返回全局变量
- 访问jsrender模板中的全局javascript变量并更新它
- 在这种情况下,如何使变量全局可访问
- 尝试使在专用作用域中动态更改的变量全局化
- 如何从函数节点内部使变量全局.js
- 如何在phoneGap api中使javascript变量全局化
- 如何在phoneGap api中使javascript变量全局化
- JavaScript 需要帮助使变量全局化
- 当javascript中的条件变量(全局变量)发生变化时,停止循环
- 通过窗口方法使变量全局不起作用
- 如何声明局部变量全局
- 如何使javascript变量全局,并将其传递到函数ajax
- Javascript作用域变量(全局/局部)
- 在JavaScript中使数组变量全局化
- Javascript不能使变量全局化
- 在iAd Producer中设置变量全局