3 回答
TA貢獻1936條經驗 獲得超7個贊
因為filter返回一個新數組。
返回的對象test和局部變量都引用同一個數組。突變的陣列(push,pop,splice通過任一引用的等)將修改陣列。
這僅在調用remove7(). 該filter方法返回一個新數組,myArr變量現在引用這個新數組,同時myTestRun.myArr仍然引用最初創建的舊數組。如果您myTestRun.myArr === myTestRun.getMyArr()在每個點都登錄,它將在 之后開始返回 false remove7()。
但是,getMyArr()仍在關閉let myArr變量。因此,它將始終記錄當時變量當前持有的任何內容
TA貢獻1873條經驗 獲得超9個贊
如果你使用它會更好
function test() {
this.myArr = [];
this.getMyArr = () => this.myArr;
this.add = n => {
this.myArr.push(n);
return () => {
this.myArr = this.myArr.filter(a => a !== n);
};
};
}
let myTestRun = new test();
let remove3 = myTestRun.add(3);
let remove7 = myTestRun.add(7);
let remove8 = myTestRun.add(8);
console.log("myArr after insertion", myTestRun.myArr);
console.log("getMyArr() after insertion", myTestRun.getMyArr());
remove7();
console.log("myArr after removing", myTestRun.myArr); //still returns the old array without any modifications
console.log("getMyArr() after removing", myTestRun.getMyArr());
添加回答
舉報
