將參數傳遞給存儲在變量中的IIFE的正確語法是什麼?下面將參數傳遞給IIFE
例子告訴我,foo
沒有定義,不管,如果我調用該函數或不:
var bar = (function(foo){
return {
getFoo: function(){
return foo;
}
}
})(foo);
console.log(bar.getFoo(1));
將參數傳遞給存儲在變量中的IIFE的正確語法是什麼?下面將參數傳遞給IIFE
例子告訴我,foo
沒有定義,不管,如果我調用該函數或不:
var bar = (function(foo){
return {
getFoo: function(){
return foo;
}
}
})(foo);
console.log(bar.getFoo(1));
的IIFE是立即調用。您在調用時將foo
傳遞給它,並且我認爲它是未定義的。
存儲在bar
中的內容不是IIFE,而是IIFE返回的對象,與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
未定義。您應該首先在外部變量環境中定義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)
所以不可能像'bar(1)'做'foo === 1'這樣的事情嗎? – Johan
你可以像創建一個getter一樣創建一個類似setter的方法。在該方法中,您可以將foo的值設置爲任何您傳遞的值。你是在試圖完成一些實際的事情,還是試圖理解它是如何工作的? – bfavaretto
@Johan查看我的更新了setter代碼。 – bfavaretto