作为参数的作业

时间:2014-05-22 12:51:38

标签: javascript

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

2 个答案:

答案 0 :(得分:1)

作者的做法将确保window.skillet不再是undefined,如果它是第一位的话。然后,传入该值。您建议的方式将最终传递相同的值,但window.skillet仍将是未定义的。

作者可以做以下事情以使其更具可读性:

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

答案 1 :(得分:0)

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

这是一个较短的版本:

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

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

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

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