如下程式碼
我想了解為什麼最後的
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