javascript - 變數作用域問題
伊谢尔伦
伊谢尔伦 2017-05-19 10:07:17
0
2
418
var name = 'World!';
(function () {
    if (typeof name === 'undefined') {
        var name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})();

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

#
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回覆(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);
    }
})();
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板