IIFE là ngay lập tức được gọi. Bạn đang chuyển số foo
tới địa chỉ yêu cầu và tôi cho rằng nó không được xác định.
Những gì được lưu trữ trong bar
không phải là IIFE, nhưng đối tượng được trả về bởi IIFE, không liên quan gì đến foo (bên cạnh việc truy cập thông qua đóng). Nếu bạn muốn foo là 1
, không vượt qua giá trị đó để getFoo
, nhưng đến IIFE bản thân:
var bar = (function(foo){
return {
getFoo: function(){
return foo;
}
}
})(1);
console.log(bar.getFoo()); // 1
Nếu bạn muốn có một phương thức getter và setter (chức năng thực sự, getter/setter-like), sử dụng này:
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
Vì vậy, không thể làm điều gì đó như 'bar (1)' để tạo 'foo === 1'? – Johan
Bạn có thể tạo một phương thức giống như setter giống như cách bạn tạo một getter. Bên trong phương thức đó, bạn có thể đặt giá trị của foo thành bất kỳ thứ gì bạn vượt qua. Bạn đang cố gắng thực hiện một cái gì đó thực tế, hoặc chỉ cố gắng để hiểu nó hoạt động như thế nào? – bfavaretto
@Johan Xem cập nhật của tôi cho mã setter. – bfavaretto