这里我只是为我的应用程序创建一个全局命名空间,一切都按预期工作
var MYAPP = MYAPP || {} ;
但如果我省略 var 关键字(我知道这不是正确的方法),javascript 会抛出错误“ReferenceError: MYAPP2 is not defined”。
MYAPP2 = MYAPP2 || {};
出于好奇,有人可以在第二种情况下向我解释为什么 javascript 无法解析引用。
最佳答案
第一个版本不会产生错误,因为 Javascript 的变量提升使其等同于此:
var MYAPP; // declares, but leaves the value undefined / unchanged
MYAPP = MYAPP || {}; // creates, if the value was previously undefined
重要的是,此声明部分不会覆盖任何现有声明或已经对变量进行的赋值。
这就是允许在单个范围内重复使用此模式的原因。 MYAPP
要么保留它已有的值,要么初始化为一个空对象。
在第二种情况下,实际上省略了声明步骤。如果变量尚未声明(或以其他方式存在于范围内,即作为全局对象的属性),则会生成您看到的错误。
关于javascript - 在没有 var 关键字的情况下创建全局变量时的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11932497/