变量作用域问题

var name = 'World!';
(function () {
    if (typeof name === 'undefined') {
        var name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})();

请问name是全局变量啊 为什么在立即执行函数中为undefined

阅读 2.8k
2 个回答

因为你自执行函数内也有一个 name变量,自执行函数内的变量name是用var进行声明的 会提升到自执行函数的作用域顶端
即你的代码可以粗略的看为这样执行的

(function () {
//最新执行
var name
//然后执行if
if (typeof name === 'undefined') {
    //然后在这里给name赋值
    name = 'Jack';
    console.log('Goodbye ' + name);
} else {
    console.log('Hello ' + name);
}
})()

注意变量提升,你的代码解析后变成如下

var name ;
name = 'World!';
(function () {
    var name;
    if (typeof name === 'undefined') {
        name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})();
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题