Javascript 问题 : about variable definition

标签 javascript

我不知道为什么如果我用“var”指定一个变量它不起作用: 像这样:

var mytool = function(){
      return {
         method: function(){}
     }
}();

后来我在同一个模板中使用它:mytool.method。这将输出 mytool was not defined。

但是如果我这样定义它:

     mytool = function(){
          return {
             method: function(){}
         }
    }();

然后就可以了。

最佳答案

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

声明变量时,使用 var 关键字。
如果您不使用 var 关键字,Javascript 将向上遍历作用域链,期望找到在更高函数某处声明的变量。这就是为什么上面的 x = 42 赋值给用 var x 高一级声明的 x 的原因。

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

关于Javascript 问题 : about variable definition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4311328/

相关文章:

javascript - 将 [object Object] 转换为值

javascript - 使用 Angular.ui Datepicker 没有显示日期

javascript - 使用 CSS 按固定值调整大小

javascript - 在两个元素之间随机显示/隐藏

javascript - Babel 编译代码中的 this 语法是什么?

javascript - jQuery AJAX 轮询 JSON 响应,基于 AJAX 结果或 JSON 内容进行处理

javascript - 在 Polymer 中动态更改 'is' 时出现问题

javascript - 如何从 Android 浏览器中打开的网页中检测用户的位置?

javascript - 通过 AJAX 和 JQUERY 动态添加输入表单

javascript - 加载 iframe 视频 javascript 时避免页面刷新