我经常看到javascript代码中定义的全局对象充当命名空间.
var MyNS = {a: function() {}, ... };
Run Code Online (Sandbox Code Playgroud)
但有时,我看到人们不喜欢"var"关键字
MyNS = {a: function() {}, ...};
Run Code Online (Sandbox Code Playgroud)
我相信在Web浏览器中如果不使用var定义变量,则将其放在window对象中,该对象充当全局命名空间.由于它不使用"var"来保存几个字节的文本,是否有理由将此关键字用于此特定目的?
由于它不使用"var"来保存几个字节的文本,是否有理由将此关键字用于此特定目的?
var即使您使用的是Global Code,我也不建议您避开关键字.
这两种方式看似相似,但实际上它们并不相同,第一种是变量声明,全局代码上的变量对象,是全局对象本身,这就是全局变量可以作为全局对象(window.MyNS)的属性访问的原因.
第二个是未声明的赋值,如果在作用域链中找不到标识符,它会在全局对象上创建一个属性.
避免它的一个真正原因是,在语言的新标准ECMAScript第5版中,在严格模式下,对未声明的标识符的赋值将ReferenceError破坏您的代码.
您的两个示例之间还有另一个细微差别,变量实例化在全局对象上创建不可删除的属性:
var myVar = '';
delete window.myVar; // false
typeof window.myVar; // 'string'
Run Code Online (Sandbox Code Playgroud)
虽然未申报的任务不是:
myProp = '';
delete window.myProp; // true
typeof window.myProp; // 'undefined'
Run Code Online (Sandbox Code Playgroud)
推荐文章: