我遇到过这种情况,其中var
的行为与直觉相反。与节点JS运行时,不应该有一个未初始化的变量var undefined
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
}
}
结果:
下面是一个例子
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
设置toRun
到undefined
每次执行循环中的代码?
node -v
v0.10.33
'var'语句被挂起;任务不是。例如,如果您编写'var toRun = undefined;',而不是仅仅使用'var toRun;',您将得到您想要的内容。 – raina77ow 2014-12-02 21:50:48
@ raina77ow:\t 谢谢你指点我正确的方向。我不知道js会将变量的初始化移动到当前函数的开始,我期待它在块级别上这样做。您应该将此作为解决此问题的答案妥善关闭。 – Coyote 2014-12-02 22:52:20