设置与自己相等的东西有什么意义?

qwe*_*ynl 3 javascript variables parameters module-pattern

我刚刚看到有人传入函数的这个问题window.Module = window.Module || {}.

例如:

(function(module){
    // do something with module
})(window.Module = window.Module || {});
Run Code Online (Sandbox Code Playgroud)

我理解如果window.Module未定义(或者就此而言是假的)那么{}就会被传入,但是设置中的重点是什么window.Module呢?


对于发布答案的人:

我把代码读作:

if(!(window.Module = window.Module)) {
     // pass {} into function
}
else {
     // pass window.Module = window.Module into function 
     // (which makes NO sense to me)
}
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 6

这一点做了两件事:

  1. window.Module || {}位使用JavaScript的奇怪强大的||运算符来评估window.Module(如果它是真实的)或{}(如果window.Module是假的).||评估其第一个非假名操作数.然后将结果分配给window.Module.结果是,如果 window.Module是假的(可能undefined),它被{}分配给它; 如果它不是假的(它可能已经指向一个对象),理论上它会被重新分配给自己,虽然在实践中引擎可能足够聪明,不会打扰死货.

  2. 然后它将赋值的结果(值[now] in window.Module)传递给函数.

因此,最终结果是,window.Module如果之前未设置,则将其设置为新的空白对象,并且无论之前是否设置了该对象,都将(现在)的任何对象window.Module传递给该函数.