未知的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我在问为什么,我不明白为什么不能定义一个普通的函数。