第二个 console.log 上的 bar
发生了什么?不应该是“Andy”或引发引用错误吗?另外,为什么 foo
不是未定义的?
使用 Chrome。
// lexical scope example
var bar = "Andy";
try {
console.log(bar); // Andy
(function() {
console.log(bar); // undefined!
var bar = "B",
foo = "Last Name";
console.log(bar); // B
console.log(foo); // Last Name
})();
console.log(bar); // B
console.log(foo); // Reference Error
} catch (e) {
console.log(e);
}
上面的 JSFiddle: http://jsfiddle.net/2D9fj/3/
最佳答案
var 声明被提升,在解析后你的代码看起来像,(这就是为什么很多开发人员都在顶部定义他们的 vars 的原因)
// lexical scope example
var bar = "Andy";
try {
console.log(bar); // Andy
(function() {
var bar, foo;
console.log(bar); // undefined!
bar = "B";
foo = "Last Name";
console.log(bar); // B
console.log(foo); // Last Name
})();
console.log(bar); // B
console.log(foo); // Reference Error
} catch (e) {
console.log(e);
}
关于JavaScript 变量作用域不期望结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10638823/