我一直在 JavaScriptAngularJS 中使用 IIFE,并且一直使用以下结构:

方法一:

//IIFE Immediately Invoked Function Expression
(function () {


}());

但是,我经常看到以下情况,其中将变量分配给 IIFE
方法二:
//IIFE Immediately Invoked Function Expression assigned to doStuff variable
var doStuff = (function () {


}());

注意: 这个问题是 NOT 关于这个模式是什么或 IIFE 是什么。这特别涉及为什么在 IIFE 上使用返回变量及其与 Angular 实践的关系。

在 Angular 方法 1 中工作正常,但在我看到的许多原始 JS 示例中,使用了方法 2。我的假设是任何封装在 doStuff 中的东西都可以通过它访问并且可以调用。但是,我不是 100% 确定这两种方法之间的确切推理或区别,需要一些帮助来理解何时使用不同的方法?

最佳答案

方法#2 的原因是您会在 IIFE 中找到返回某些内容的代码(通常但不一定是对象或函数)。 IIFE 返回的是最终被分配的内容。例如。:

//IIFE Immediately Invoked Function Expression assigned to doStuff variable
var doStuff = (function () {
    var privateInformationForDoStuff = 0;

    function doStuff() {
        console.log(++privateInformationForDoStuff);
    }

    return doStuff;
}());

在那里,变量最终成为对函数的引用,每次调用该函数时,都会为我们提供一个比前一次更高的数字。 IIFE 是为了确保没有任何东西可以修改 privateInformationForDoStuff 变量,它对 doStuff 函数完全私有(private)。

它的常见用途是创建具有各种功能的对象,有时称为模块,它们也可能具有仅在“模块”中共享的私有(private)信息:
var MyApp = (function() {
    var privateModuleInformation;
    var morePrivateModuleInformation;
    // ...

    function doThis() {
        // ...
    }

    function doThat() {
        // ...
    }

    function doTheOther() {
        // ...
    }

    return {
        doThis: doThis,
        doThat: doThat,
        doTheOther: doTheOther
    };
})();

关于javascript - 为什么将 IIFE 分配给变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26451697/

10-13 05:55