3 回答

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
因?yàn)?a >filter
返回一個(gè)新數(shù)組。
返回的對(duì)象test
和局部變量都引用同一個(gè)數(shù)組。突變的陣列(push
,pop
,splice
通過(guò)任一引用的等)將修改陣列。
這僅在調(diào)用remove7()
. 該filter
方法返回一個(gè)新數(shù)組,myArr
變量現(xiàn)在引用這個(gè)新數(shù)組,同時(shí)myTestRun.myArr
仍然引用最初創(chuàng)建的舊數(shù)組。如果您myTestRun.myArr === myTestRun.getMyArr()
在每個(gè)點(diǎn)都登錄,它將在 之后開(kāi)始返回 false remove7()
。
但是,getMyArr()
仍在關(guān)閉let myArr
變量。因此,它將始終記錄當(dāng)時(shí)變量當(dāng)前持有的任何內(nèi)容

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果你使用它會(huì)更好
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());
添加回答
舉報(bào)