搜尋

首頁  >  問答  >  主體

javascript - 變數作用域問題

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

請問name是全域變數啊 為什麼在立即執行函數中為undefined

#
伊谢尔伦伊谢尔伦2802 天前463

全部回覆(2)我來回復

  • 怪我咯

    怪我咯2017-05-19 10:09:17

    因為你自執行函數內也有一個 name變量,自執行函數內的變量name是用var進行聲明的 會提升到自執行函數的作用域頂端
    即你的代碼可以粗略的看為這樣執行的

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

    回覆
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-19 10:09:17

    注意變數提升,你的程式碼解析後變成如下

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

    回覆
    0
  • 取消回覆