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)
这一点做了两件事:
该window.Module || {}位使用JavaScript的奇怪强大的||运算符来评估window.Module(如果它是真实的)或{}(如果window.Module是假的).||评估其第一个非假名操作数.然后将结果分配给window.Module.结果是,如果 window.Module是假的(可能undefined),它被{}分配给它; 如果它不是假的(它可能已经指向一个对象),理论上它会被重新分配给自己,虽然在实践中引擎可能足够聪明,不会打扰死货.
然后它将赋值的结果(值[now] in window.Module)传递给函数.
因此,最终结果是,window.Module如果之前未设置,则将其设置为新的空白对象,并且无论之前是否设置了该对象,都将(现在)的任何对象window.Module传递给该函数.