Javascript 为什么在这个var声明中将这个变量赋值给它自己?

Javascript 为什么在这个var声明中将这个变量赋值给它自己?,javascript,syntax,Javascript,Syntax,我在读Ben Cherry的“”,他有一些我不太理解的示例代码。在交叉文件私有状态标题下,有一些示例代码具有以下内容: var _private = my._private = my._private || {} 这似乎和写这样的东西没什么不同: var _private = my._private || {} 这里发生了什么,这两个声明有什么不同 var _private = my._private = my._private || {} 该行表示使用my.\u private(如果存在

我在读Ben Cherry的“”,他有一些我不太理解的示例代码。在交叉文件私有状态标题下,有一些示例代码具有以下内容:

var _private = my._private = my._private || {}
这似乎和写这样的东西没什么不同:

var _private = my._private || {}
这里发生了什么,这两个声明有什么不同

var _private = my._private = my._private || {}
该行表示使用
my.\u private
(如果存在),否则创建一个新对象并将其设置为
my.\u private

语句中可以使用多个赋值表达式。赋值运算符使用(消耗)它右边的任何值,并生成该值作为它在被赋值变量左边的输出。因此,在本例中,为了清楚起见,上面的括号相当于
var_private=(my._private=(my._private | |{}))

这个案子是一种犯罪。不那么简洁的版本是:

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

在这种情况下,与惰性相比,惰性初始化似乎更多地用于anywhere初始化。换句话说,所有函数都可以包含这一行,以安全地创建或使用
my.\u private
,而不会破坏现有变量。然后赶我去编辑,因为我知道你想说什么;-)@jcolebrand我不得不从程序员那里复制我的编辑,因为它是在我编辑时迁移的:)我们显然缺少上下文,但第二个示例没有设置
my.\u private
…-@阿尔瓦罗格·维卡里奥你是对的,第二个例子与第一个不同。