Iife jest natychmiast wywoływany. W momencie wywołania przekazujesz mu numer foo
, a przypuszczam, że jest nieokreślony.
To, co jest przechowywane w bar
, to nie IIFE, ale obiekt zwracany przez IIFE, który nie ma nic wspólnego z foo (oprócz dostępu do niego poprzez zamknięcie). Jeśli chcesz być 1
bla, nie przechodzą tę wartość do getFoo
, ale do samego Iife:
var bar = (function(foo){
return {
getFoo: function(){
return foo;
}
}
})(1);
console.log(bar.getFoo()); // 1
Jeśli chcesz getter i setter (funkcje rzeczywiście, getter/setter-like), użyj to:
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
Więc nie można zrobić czegoś takiego jak 'bar (1)', aby zrobić 'foo === 1'? – Johan
Możesz stworzyć metodę podobną do setera w taki sam sposób, w jaki stworzyłeś getter. Wewnątrz tej metody możesz ustawić wartość foo na cokolwiek przechodzisz. Czy próbujesz osiągnąć coś praktycznego, czy tylko próbujesz zrozumieć, jak to działa? – bfavaretto
@Johan Zobacz moją aktualizację dla kodu ustawiającego. – bfavaretto