将参数传递给存储在变量中的 IIFE 的正确语法是什么?
下面的示例告诉我foo
未定义,无论我是否调用该函数:
var bar = (function(foo){
return {
getFoo: function(){
return foo;
}
}
})(foo);
console.log(bar.getFoo(1));
将参数传递给存储在变量中的 IIFE 的正确语法是什么?
下面的示例告诉我foo
未定义,无论我是否调用该函数:
var bar = (function(foo){
return {
getFoo: function(){
return foo;
}
}
})(foo);
console.log(bar.getFoo(1));
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
foo
你传递给 IIFE 的那个没有定义。您应该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));
为我工作。
它是foo
你传递给函数的那个。
const bar = (foo => ({ getFoo: _ => foo }))("foobar");
console.log(bar.getFoo())