我遇到了一些以前没有见过的语法:http://appendto.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-1/
(function( skillet, $, undefined ) {
//Private Property
var amountOfGrease = "1 Cup";
//Public Method
skillet.toString = function() {
console.log( skillet.quantity + ' ' +
skillet.ingredient + ' & ' +
amountOfGrease + ' of Grease' );
console.log( isHot ? 'Hot' : 'Cold' );
};
}( window.skillet = window.skillet || {}, jQuery ));
我了解作者正在检查
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
如果希望代码可读,则使用包含赋值的表达式不是一个好主意,但这会使代码明显缩短。