如下程式碼
我想了解為什麼最後的
app.map.test();
輸出不是 new
const app = {
map: {},
on(key, callback) {
this.map[key] = function (params) {
callback(params);
};
},
};
let testFn = function(params){
console.log("old");
}
app.on("test", testFn);
console.log(app.map.test);//f(params){callback(params)};
app.map.test(); //output: old
testFn = function(event){
console.log("new");
}
app.map.test(); //output: old
app.on 建立時形成閉包
可參考:https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Closures
const app = {
map: {},
on(key, callback) {
this.map[key] = function (params) {
console.log(callback); //ƒ (params){console.log("old");}
callback(params);
};
},
};
let testFn = function(params){
console.log("old");
}
app.on("test", testFn);
console.log(app.map.test);//f(params){callback(params)};
app.map.test(); //output: old
testFn = function(event){
console.log("new");
}
app.map.test();
函式建立時,內外部的變數就會是當下的值或址,唯一可變的只有傳入的參數而已,這也就是 neil_0221 所說的閉包。
不完整的記憶體操作步驟如下:
let testFn = function (params) {
console.log('test');
};
function
function
至 AtestFn
app.on('test', testFn);
// =
this.map['test'] = function (params) {
testFn(params);
};
function
function
至 C
testFn
參考 Aapp.map.test
testFn = function (event) {
console.log('new');
};
function
function
至 F