【发布时间】:2014-12-02 21:46:44
【问题描述】:
我遇到了一个案例,var 的行为与直觉相反。
这是一个例子:
for (var i = 0; i < 10; i++) {
var toRun;
if(i%2 !== 0) {
toRun = {number:i};
}
console.log("toRun is", toRun);
if ('undefined' != typeof toRun && 'undefined' != typeof toRun.number)
{
//Do something
}
}
用node js运行的结果是:
toRun is undefined
toRun is { number: 1 }
toRun is { number: 1 }
toRun is { number: 3 }
toRun is { number: 3 }
toRun is { number: 5 }
toRun is { number: 5 }
toRun is { number: 7 }
toRun is { number: 7 }
toRun is { number: 9 }
我期待:
toRun is undefined
toRun is { number: 1 }
toRun is undefined
toRun is { number: 3 }
toRun is undefined
toRun is { number: 5 }
toRun is undefined
toRun is { number: 7 }
toRun is undefined
toRun is { number: 9 }
这是 javascript 中的正常行为吗?
不应该在每次执行循环中的代码时将var toRun 设置为undefined 吗?
node -v
v0.10.33
【问题讨论】:
-
var语句被提升;作业不是。例如,如果你写var toRun = undefined;而不仅仅是var toRun;,你会得到你想要的。 -
@raina77ow :感谢您为我指明了正确的方向。我不知道 js 会将变量的初始化移动到当前函数的开头,我希望它在块级别这样做。您应该将此作为答案发布以正确关闭此问题。
标签: javascript node.js initialization standards scope