我以前从未见过这种设计模式,它在做什么?
(function(def){
if(typeof module!='undefined'){
module.exports=def;
}
else{
this.nut=def;
}
}( function(){
...
}() ));
正如Ben Alman所说,这是一个"立即调用的函数表达式"。定义的第一个函数采用一个参数,def
。将此函数包装在参数中并向其传递第二个函数定义(也在括号中)会立即调用第一个函数,将第二个函数的结果(也立即调用)作为def
参数传递给它。
详细信息:http://benalman.com/news/2010/11/immediately-invoked-function-expression/
让我们一步一步地解码它
function(def)
{
if(typeof module!='undefined'){
module.exports=def;
}
else{
this.nut=def;
}
}( function(){}());
删除了外括号现在如您所见,定义了一个函数,这是定义函数
的正常方式这需要一个参数def
定义之后立即有一个括号
因此,如果我们进一步细分,那么
function(def) //function 1
{
if(typeof module!='undefined'){
module.exports=def;
}
else{
this.nut=def;
}
}( function() /*function 2*/{}());
这仅意味着第二个函数作为参数传递给第一个函数
在 JS 中定义函数之后的bracket ()
表示此处的函数function 1
将在定义后立即调用。括号内的内容将作为参数传递给函数def
因此基本上是function2