如何正确传递参数给存储在变量中的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
var bar = (function(){
return {
getFoo: function(foo){
return foo;
}
}
})();
console.log(bar.getFoo(1));
对我来说可行。
你传递到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)
const bar = (foo => ({ getFoo: _ => foo }))("foobar");
console.log(bar.getFoo())
你传递到函数中的是foo
。
bar(1)
这样的操作就不能使得foo === 1
吗? - Johan