Javascript问题:关于变量定义

Jos*_*hua 3 javascript

如果我用'var'指定变量,我不知道为什么它不起作用:像这样:

var mytool = function(){
      return {
         method: function(){}
     }
}();
Run Code Online (Sandbox Code Playgroud)

后来我在同一个模板中使用它:mytool.method.这将输出mytool未定义.

但如果我这样定义它:

     mytool = function(){
          return {
             method: function(){}
         }
    }();
Run Code Online (Sandbox Code Playgroud)

然后它工作.

dec*_*eze 5

Javascript具有功能范围.变量在其声明的函数范围内,其中还包括您可以在该函数中定义的任何函数.

function () {
    var x;

    function () {
        // x is in scope here
        x = 42;

        y = 'foo';
    }

    // x is in scope here
}

// x is out of scope here

// y is in scope here
Run Code Online (Sandbox Code Playgroud)

声明变量时,使用var关键字.
如果你不使用var关键字,Javascript将遍历范围链,期望在更高的函数中找到声明的变量.这就是为什么x = 42上面的任务分配给x那个声明var x更高一级的原因.

如果您之前没有声明变量,Javascript将遍历全局对象并为您创建该变量.y上面的变量附加到全局对象,window.y因此在声明函数之外的范围内.
这很糟糕,你需要避免它.使用适当地在正确的范围内声明变量var.