用于测试变量存在的Javascript多重赋值:var obj = obj = obj || {}

Fabmlk

在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档