JavaScript 变量作用域不期望结果

标签 javascript

第二个 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/

相关文章:

javascript - MVC webgrid 列宽?

javascript - 类型错误 : Cannot assign to read only property 'checked' checkbox

javascript - Polymer:dom-repeat 就像元素的局部变量

Javascript - 三元运算符 - 比较相同的函数两次?

javascript - MongoDB 脚本加载正确,但不工作

javascript - 如何防止 Node 程序停止运行?

javascript - 在 NodeJS 中使用 mongoose 设置值

javascript - Angular 模式形式模态.... $scope 的问题

javascript - jQuery Datepicker - 多个实例并禁用以前选择的日期?

javascript - Vis.js - 将图形标签的字体设置为粗体