Javascript 作为参数的赋值

Javascript 作为参数的赋值,javascript,Javascript,我在这里遇到了一些以前从未见过的语法: 我知道作者正在检查skillet对象的全局范围,并将其传递到IIFE中(如果存在),我只是不清楚传递window.skillet=window.skillet的值 作业评估为作业的价值: var x = 1; var y = x = x; console.log(y); //1 console.log(y = (x = x)); true 但是既然window.skillet如果未定义,那么它将是错误的,那么作者为什么不简单地传递这个: ( window

我在这里遇到了一些以前从未见过的语法:

我知道作者正在检查
skillet
对象的全局范围,并将其传递到IIFE中(如果存在),我只是不清楚传递
window.skillet=window.skillet
的值

作业评估为作业的价值:

var x = 1;
var y = x = x;
console.log(y); //1
console.log(y = (x = x)); true
但是既然
window.skillet
如果未定义,那么它将是错误的,那么作者为什么不简单地传递这个:

( window.skillet || {}, jQuery )

它保证在执行这行代码后定义window.skillet。如果它以前未定义,现在将包含一个空对象

这是一个较短的版本:

window.skillet = window.skillet || {};

(function( skillet, $, undefined ) {
      //...
  };
}( window.skillet, jQuery ));

// at this point window.skillet is guaranteed to be defined

如果希望代码可读,则使用包含赋值的表达式不是一个好主意,但它可以使代码显著缩短。

作者这样做将确保
window.skillet
不再是
未定义的
。然后,传入该值。您建议的方法最终将传入相同的值,但是
window.skillet
仍将是未定义的

作者本可以采取以下措施使其更具可读性:

// preceding code....
    if(!window.skillet) {
        window.skillet = {};
    }
}( window.skillet, jQuery ));

为什么
(window.skillet | |{},jQuery)
不能完成同样的事情呢?具体来说,为什么参数?window.skillet中的赋值不存在时将保持不变
// preceding code....
    if(!window.skillet) {
        window.skillet = {};
    }
}( window.skillet, jQuery ));