所以我有一些正在用Node(v6.0.0)执行的本地javascript代码。在JavaScript错误导致内存堆内存不足后,我注意到了一些奇怪的事情;迭代变量将作用域“跟随”为循环中调用的函数。考虑这个例子;
function foo() {
for (i = 0; i < 2; i++) {
console.log(`i in foo():${i}`);
}
}
function bar() {
for (i = 0; i < 2; i++) {
foo();
console.log(`i in bar():${i}`);
}
}
来自Java,我希望它可以打印
i in foo(): 0
i in foo(): 1
i in bar(): 0
i in foo(): 0
i in foo(): 1
i in bar(): 1
但是实际打印的内容如下:
i in foo(): 0
i in foo(): 1
i in bar(): 2
然后退出。这是Java的预期行为吗?我希望i变量的范围不会正常继续进入被调用的函数。
答案 0 :(得分:2)
在您的代码i
中没有定义任何地方,因此将在全局范围内定义。因此,请在for循环中初始化变量以创建局部变量。
function foo() {
for (let i = 0; i < 2; i++) {
//---^^^^^^^^^---------------
console.log(`i in foo():${i}`);
}
}
function bar() {
for (let i = 0; i < 2; i++) {
foo();
console.log(`i in bar():${i}`);
}
}