var Global = {
local: function () {
var local = null
return {
getLocal: function () {
return local
},
setLocal: function (params) {
local = params
}
}
}
}
// console.log( Global.local().getLocal())
var Global= {
local: (function () {
var local = null
return {
getLocal: (function () {
return local
})(),
setLocal: function (params) {
local = params
}
}
})()
}
// not work !!!
// console.log( Global.local.getLocal) => null
// Global.local.setLocal('123')
// console.log( Global.local.getLocal) => null
vấn đề là chổ getLocal và setLocal invoke 2 hàm khác nhau và do đó closure(var local) sẽ khác nhau
var Global= {
local: (function () {
var local = null
return {
getLocal: function () {
return local
},
setLocal: function (params) {
local = params
}
}
})()
}
// bo IIFE chổ setLocal đi, cả 2 sẽ cùng chung 1 closure
// it work !
Global.local.setLocal('namespace')
console.log( Global.local.getLocal());
Như trường hợp này khi in ra thì message dã undifine
một ví dụ khác ở đây. Mối hàm result() sẽ truy cập tới 1 closure khác nhau
var result = [];
for(var year = 0; year < 5; year++) {
(function() {
var y = year;
result.push(function() { return y; });
})();
}
console.log(result[1]()); // 1
console.log(result[3]()); // 3