未知的javascript函数声明模式

时间:2012-08-08 20:23:09

标签: javascript

我之前从未见过这种设计模式,它在做什么?

(function(def){
    if(typeof module!='undefined'){
        module.exports=def;
    }
    else{
        this.nut=def;
    }
}( function(){
   ...
}() ));

2 个答案:

答案 0 :(得分:2)

正如Ben Alman所说,这是一个“立即调用的函数表达式”。定义的第一个函数采用一个参数def。在parantheses中包装此函数并向其传递第二个函数定义(也在括号中)会立即调用第一个函数,并将第二个函数的结果(也会立即调用)作为def参数传递给它。

更多信息:http://benalman.com/news/2010/11/immediately-invoked-function-expression/

答案 1 :(得分:1)

让我们一步一步解码

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基本上是{{1}}