如果我用'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)
然后它工作.
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.
| 归档时间: |
|
| 查看次数: |
399 次 |
| 最近记录: |