我正在阅读Ben Cherry的“JavaScript Module Pattern: In-Depth”,他有一些我不太了解的示例代码。在跨文件私有状态标题下,有一些示例代码具有以下内容:
var _private = my._private = my._private || {}
这与写下这样的东西似乎没有什么不同:
var _private = my._private || {}
这里发生了什么,这两个声明有何不同?
答案 0 :(得分:7)
var _private = my._private = my._private || {}
此行表示使用my._private
(如果存在),否则创建新对象并将其设置为my._private
。
可以在语句中使用多个赋值表达式。赋值运算符使用(消耗)其右侧的任何内容,并将该值作为其输出到所分配的变量的左侧。因此,在这种情况下,为了清楚起见,括号中的上述内容相当于var _private = (my._private = (my._private || {}))
此案例属于lazy initialization。一个不太简洁的版本是:
if (!my._private) {
my._private = {};
}
var _private = my._private;
在这种情况下,似乎延迟初始化更多地用于任何地方的初始化而不是懒惰。换句话说,所有函数都可以包含此行来安全地创建或使用my._private
而不会吹走现有的var。