Javascript 无法更新局部变量
一直试图通过添加/删除函数更新局部变量(数组)。我能够使用add函数添加项,该函数也更新了我的本地数组,但当我尝试使用代码删除相同的项时,它仍然会返回我的旧数组而不做任何修改。 但是,如果我尝试使用pop()删除一个元素,一切似乎都正常Javascript 无法更新局部变量,javascript,Javascript,一直试图通过添加/删除函数更新局部变量(数组)。我能够使用add函数添加项,该函数也更新了我的本地数组,但当我尝试使用代码删除相同的项时,它仍然会返回我的旧数组而不做任何修改。 但是,如果我尝试使用pop()删除一个元素,一切似乎都正常 我知道我的remove函数中的过滤器正在返回修改过的数组,但在名为mainArr的数组中它没有得到更新 当我用mainArr.pop()而不是我的代码替换删除功能时,为什么阵列会得到更新 如果将remove函数中的赋值运算符替换为this.mainArr=//过
mainArr
的数组中它没有得到更新mainArr.pop()
而不是我的代码替换删除功能时,为什么阵列会得到更新mainArr
,因此它不会更新我的实际mainArr
。它为什么这样做?我的内部函数可以访问全局变量,这不是闭包的概念吗?我错过了什么
功能测试(){
设mainArr=[];
函数添加(func){
主推力(功能);
}
函数删除(num){
mainArr=mainArr.filter(项=>item!==num)
}
返回{
迈纳尔,
添加
去除
}
}
设val=test()
val.mainArr//返回[]
val.add(3)
val.add(5)
val.mainArr//返回[3,5]
val.remove(3)
console.log(val.mainArr)//仍然返回[3,5]。为什么?
mainArr.push(函数)代码>对数组进行变异
mainArr.filter(item=>item!==num)
创建一个新的数组
let mainArr=[]
是一个保存原始数组的变量。稍后,将过滤后的版本分配给变量
return{mainArr,add,remove}
返回mainArr
的值,该值当时是原始数组。稍后更改mainArr
变量的值时,先前返回的值仍然是原始数组(不执行时间旅行!)
先创建对象,然后始终修改该对象的属性。不要从后来改变了值的变量创建它
功能测试(){
函数添加(func){
数据主推送(func);
}
函数删除(num){
data.mainArr=data.mainArr.filter(item=>item!==num)
}
常数数据={
mainArr:[],
添加
去除
};
返回数据;
}
设val=test()
控制台日志(val.mainArr);
val.add(3)
val.add(5)
console.log(val.mainArr)
val.remove(3)
控制台日志(val.mainArr)
mainArr.push(func)代码>对数组进行变异
mainArr.filter(item=>item!==num)
创建一个新的数组
let mainArr=[]
是一个保存原始数组的变量。稍后,将过滤后的版本分配给变量
return{mainArr,add,remove}
返回mainArr
的值,该值当时是原始数组。稍后更改mainArr
变量的值时,先前返回的值仍然是原始数组(不执行时间旅行!)
先创建对象,然后始终修改该对象的属性。不要从后来改变了值的变量创建它
功能测试(){
函数添加(func){
数据主推送(func);
}
函数删除(num){
data.mainArr=data.mainArr.filter(item=>item!==num)
}
常数数据={
mainArr:[],
添加
去除
};
返回数据;
}
设val=test()
控制台日志(val.mainArr);
val.add(3)
val.add(5)
console.log(val.mainArr)
val.remove(3)
console.log(val.mainArr)
您正在重新分配给局部变量。这不会更新另一个引用,mainArr
function remove(num){const updated=mainArr.filter(item=>item!==num);mainArr.length=0;mainArr.push.apply(mainArr,updated);}
谢谢@epascarello,我现在明白了。您正在重新分配给局部变量。这不会更新另一个引用,mainArr
function remove(num){const updated=mainArr.filter(item=>item!==num);mainArr.length=0;mainArr.push.apply(mainArr,updated);}
谢谢@epascarello,我现在明白了。