为什么将IIFE分配给变量?

问题描述

方法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函数的私有变量。

这样做的常见用途是创建具有各种功能的对象,有时称为模块,这些功能也可能具有仅在“模块”内共享的私有信息:

var MyApp = (function() {
    var privateModuleInformation;
    var morePrivateModuleInformation;
    // ...

    function doThis() {
        // ...
    }

    function doThat() {
        // ...
    }

    function doTheOther() {
        // ...
    }

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

解决方法

我一直在使用IIFE中JavaScriptAngularJS,并一直在使用的结构如下:

方法1:

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


}());

但是,我经常看到以下情况,其中将变量分配给 IIFE

方法2:

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


}());

注意: 此问题 不是 关于此模式是什么或IIFE是什么。这与为什么要 在IIFE上 使用返回变量及其与Angular实践的关系有关。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...