未知的javascript函数声明模式
我以前从未见过这种设计模式,它在做什么未知的javascript函数声明模式,javascript,Javascript,我以前从未见过这种设计模式,它在做什么 (function(def){ if(typeof module!='undefined'){ module.exports=def; } else{ this.nut=def; } }( function(){ ... }() )); 正如Ben Alman所说,这是一个“立即调用的函数表达式”。定义的第一个函数接受一个参数,def。将此函数包装在parantesse中,并向其传递第
(function(def){
if(typeof module!='undefined'){
module.exports=def;
}
else{
this.nut=def;
}
}( function(){
...
}() ));
正如Ben Alman所说,这是一个“立即调用的函数表达式”。定义的第一个函数接受一个参数,def
。将此函数包装在parantesse中,并向其传递第二个函数定义(也在括号中)将立即调用第一个函数,并将第二个函数的结果(也将立即调用)作为def
参数传递给它
更多信息:正如Ben Alman所说,这是一个“立即调用的函数表达式”。定义的第一个函数接受一个参数,def
。将此函数包装在parantesse中,并向其传递第二个函数定义(也在括号中)将立即调用第一个函数,并将第二个函数的结果(也将立即调用)作为def
参数传递给它
更多信息:让我们一步一步地解码它
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中函数定义后的
括号()
表示该函数将在定义后立即调用函数1
。括号内的内容将作为参数传递给函数,因此def
基本上是function2
让我们一步一步地对其进行解码
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中函数定义后的
括号()
表示该函数将在定义后立即调用函数1
。括号内的任何内容都将作为参数传递给函数,因此def
基本上就是function2
将一个匿名函数传递给另一个函数。您是否在问为什么要将一个函数传递给另一个函数,或者整个构造((函数(foo){…}(bar))
)是如何工作的?可能是。的副本。这似乎是一种过于复杂的方法,使模块在没有CommonJS模块支持的环境中变为全局模块。@FelixKling我在问为什么,我不明白为什么不能像普通函数那样定义一个函数。将一个匿名函数传递给另一个匿名函数。你是在问为什么要将一个函数传递给另一个函数,还是问整个构造((函数(foo){…}(bar))
)是如何工作的?在没有CommonJS模块支持的环境中,让一个模块沦为全局模块似乎是一种过于复杂的方法。@FelixKling我在问为什么,我不明白为什么不能定义一个普通的函数。