将参数传递给IIFE

Passing arguments to an IIFE

本文关键字:IIFE 参数传递      更新时间:2023-09-26

向存储在变量中的IIFE传递参数的正确语法是什么?

下面的示例告诉我foo没有定义,不管我是否调用函数:

var bar = (function(foo){
    return { 
        getFoo: function(){
            return foo;
        } 
    }
})(foo);
console.log(bar.getFoo(1));

http://jsfiddle.net/eSTkL/

IIFE被立即调用。您在调用时将foo传递给它,我想它是未定义的。

bar中存储的不是IIFE,而是IIFE返回的对象,它与foo无关(除了通过闭包访问它之外)。如果您希望foo为1,请不要将该值传递给getFoo,而是传递给IIFE本身:

var bar = (function(foo){
    return { 
        getFoo: function(){
            return foo;
        } 
    }
})(1);
console.log(bar.getFoo()); // 1

如果您想要一个getter和一个setter(实际上是类似getter/setter的函数),请使用以下命令:

var bar = (function(foo){
    return { 
        getFoo: function(){
            return foo;
        },
        setFoo: function(val) {
            foo = val;
        }
    }
})(1);
console.log(bar.getFoo()); // 1
bar.setFoo(2);
console.log(bar.getFoo()); // 2
传递给IIFE的foo没有定义。您应该首先在外部变量环境中定义foo
var foo = "foobar";
var bar = (function(foo){
    return { 
        getFoo: function(){
            return foo;
        } 
    }
})(foo);

或者直接在自变量位置定义它。

var bar = (function(foo){
    return { 
        getFoo: function(){
            return foo;
        } 
    }
})("foobar");

还要注意,您正在向getFoo()传递一个值,但实际上并没有在方法中使用它。

//         v----never gets used
bar.getFoo(1)

为什么不简单:

var bar = (function(){
  return { 
    getFoo: function(foo){
        return foo;
    } 
  }
})();
console.log(bar.getFoo(1));

适用于我。

const bar = (foo => ({ getFoo: _ => foo }))("foobar");
console.log(bar.getFoo())

传递给函数的是foo