在Ady Osmani的有关js中命名空间的博客文章中,他提到了5种常见做法来测试先前定义的命名空间/对象的存在以防止覆盖。我在这里复制我所关注的三点:
var myApplication = myApplication || {}; // option 1
...
var myApplication = myApplication = myApplication || {}; // option 3
myApplication || (myApplication = {}); // option 4
根据他的说法,选择3优于选择1,但我看不出选择2的区别。再做一次作业有什么好处?
还有为什么将选项4视为最佳实践?
没有var
声明的任何选项都将在“严格”模式下引起异常(或者,如注释中所指出的,如果您未处于“严格”模式!)。因此,如所选择的,选项4不是选项。
选项3与选项1没有任何不同。选项1实际上与
var whatever;
whatever = whatever || {};
选项3实际上是:
var whatever;
whatever = whatever || {};
whatever = whatever;
在所有情况下,都将var
声明(而不是初始化分配)视为出现在范围的开头(在此情况下为脚本单元)。如果该符号已经被声明(已经是的属性window
),则该var
声明无效。
因此,var
声明至关重要。因为它提升到代码的顶部,初始化表达式不会的情况下时,“无所谓”造成“的ReferenceError”不是已经定义。因为var
以非破坏性的方式处理声明,所以可以引用=
运算符右侧的符号。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句