【问题标题】:Javascript closure and IIFE (immediately invoked function expressions)Javascript 闭包和 IIFE(立即调用的函数表达式)
【发布时间】:2014-01-04 06:56:45
【问题描述】:

闭包通过引用(而不是值)存储它们的外部变量。但是,在下面的代码中,我想按值存储。谁能告诉我如何使用 IIFE?

var i = -1;
var f = function () {
    return i; // I want to capture i = -1 here!
};
i = 1;
f();    // => 1, but I want -1

【问题讨论】:

    标签: javascript closures iife


    【解决方案1】:

    您发布的内容实际上不是 IIFE:它代表立即调用的函数表达式;你有一个函数,但你没有立即调用它!

    除此之外,这里的想法是将有趣的状态位存储在函数参数中,以便它是一个独特的引用。为此,您可以创建另一个函数(函数表达式部分),然后使用要捕获其状态的全局变量(立即调用部分)调用它。这是它的样子:

    var i = -1;
    var f = (function(state) { // this will hold a snapshot of i
                return function() {
                   return state; // this returns what was in the snapshot
                };
             })(i); // here we invoke the outermost function, passing it i (which is -1).
                    // it returns the inner function, with state as -1
    i = 1; // has no impact on the state variable
    f(); // now we invoke the inner function, and it looks up state, not i
    

    【讨论】:

    • 谢谢。是的,我知道代码不使用 IIFE。 (我张贴然后删除它以避免混淆)。
    【解决方案2】:

    作为 IIFE - 立即调用该函数。

    var i = -1;
    var f = function () {
        return i; // I want to capture i = -1 here!
    }();// invoked here
    i = 1;
    console.log(f);
    

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 2012-12-28
      • 2012-09-02
      • 2016-05-04
      • 2014-08-10
      • 1970-01-01
      相关资源
      最近更新 更多