为什么验证码:到那里所有的JavaScript专家:为什么会发生这种情况?
function answer(x) {
function closure() {
var x = x || 42;
console.log(x);
}
closure();
}
foo();
始终打印42
?
的逻辑将是像foo(31337)
将打印31337
,因为在closure
x
会31337
,所以x || 42
将评估为31337
。但这种情况并非如此。
我只是无法弄清楚这一点,所以我在这里张贴这个希望从那里的真正的JavaScript大师之一接受启示。
所以你说'var x = x || 42;'和var x是一样的东西; x = x || 42;',这意味着在执行'(...)'之前'var x =(...)''x'被声明为局部变量? – NeuronQ 2011-04-17 13:21:57
@NeuronQ正好。澄清所有'var'语句被升到范围的顶部。请参阅编辑。 – Raynos 2011-04-17 13:22:28
谢谢,现在真的有道理:) – NeuronQ 2011-04-17 13:29:46