suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Javascript – Problem mit dem Variablenbereich

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

Entschuldigung, der Name ist eine globale Variable. Warum ist er in der Funktion zur sofortigen Ausführung nicht definiert?

伊谢尔伦伊谢尔伦2831 Tage vor484

Antworte allen(2)Ich werde antworten

  • 怪我咯

    怪我咯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);
    }
    })()

    Antwort
    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);
        }
    })();

    Antwort
    0
  • StornierenAntwort