我遇到了一些以前没有见过的语法: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


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

08-18 01:26