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 ));