自我执行函数在条件之后传递对象

Tom*_*atz 2 javascript oop parentheses

我遇到了一个自执行函数,它在声明包含var的条件下执行,如果它不存在则传递一个对象.

例:

var myFunc = (function(myFunc){}(myFunc || {}));
Run Code Online (Sandbox Code Playgroud)

为什么有一个"或"条件运算符传递一个对象?

Aad*_*hah 6

您提供的代码是模块模式的示例.特别是它是模块模式松散增强的一个例子.

模块模式基本上只是一个返回对象的立即调用的函数表达式(IIFE).例如:

// file 1

var MODULE = (function () {
    var my = {}, privateVariable = 1;

    function privateMethod() {
        // ...
    }

    my.moduleProperty = 1;

    my.moduleMethod = function () {
        // ...
    };

    return my;
}());
Run Code Online (Sandbox Code Playgroud)

增强功能允许您将模块拆分为多个部分.每个部分都可以驻留在它自己的文件中.例如,我们可以按如下方式扩充上述模块:

// file 2

var MODULE = (function (my) {
    my.anotherMethod = function () {
        // added method...
    };

    return my;
}(MODULE));
Run Code Online (Sandbox Code Playgroud)

但是在这种增强模式中file 1必须先加载,file 2否则你会收到错误.松散扩充允许您以任何顺序加载文件.

var MODULE = (function (my) {
    // add capabilities...

    return my;
}(MODULE || {}));
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,模块MODULE可以分成多个文件,可以按任何顺序加载.表达式MODULE || {}计算MODULE它是否存在.否则它评估为{}.

因此,对于加载的第一个文件,表达式将评估为{}因为MODULE最初是undefined.在后续文件中,表达式将评估为MODULE.