0

我以前从未见过这种设计模式,它是做什么的?

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

2 回答 2

2

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

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

于 2012-08-08T20:26:08.200 回答
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*/{}());

这只是意味着第二个函数作为参数传递给第一个函数
abracket ()就在 JS 中的函数定义之后,表示该函数function 1将在定义后立即调用。括号内的内容将作为参数传递给函数,所以def基本上是function2

于 2012-08-08T20:42:19.010 回答