3 回答
TA贡献1936条经验 获得超6个赞
因为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());
添加回答
举报