繁体   English   中英

为什么在此v​​ar声明中将此变量赋值给自身?

[英]Why assign this variable to itself in this var declaration?

我正在阅读Ben Cherry的“ JavaScript Module Pattern:In-Depth ”,他有一些我不太了解的示例代码。 在“ 交叉文件专用状态”标题下,有一些示例代码具有以下内容:

var _private = my._private = my._private || {}

这似乎与写这样的东西没有什么不同:

var _private = my._private || {}

这里发生了什么,这两个声明有何不同?

var _private = my._private = my._private || {}

此行表示使用my._private如果存在),否则创建一个新对象并将其设置为my._private

可以在语句中使用多个赋值表达式。 赋值运算符使用(消耗)其右侧的任何内容,并将该值作为其输出到所分配的变量的左侧。 所以,在这种情况下,为了清楚起见,用括号括起来,上面等同于var _private = (my._private = (my._private || {}))

这种情况是一种延迟初始化 一个不太简洁的版本是:

if (!my._private) {
    my._private = {};
}
var _private = my._private;

在这种情况下,似乎懒惰初始化更多地用于任何初始化而不是懒惰。 换句话说,所有函数都可以包含此行来安全地创建或使用my._private而不会吹走现有的var。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM