我不知道为什么如果我用“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/