Javascript 无法更新局部变量

Javascript 无法更新局部变量,javascript,Javascript,一直试图通过添加/删除函数更新局部变量(数组)。我能够使用add函数添加项,该函数也更新了我的本地数组,但当我尝试使用代码删除相同的项时,它仍然会返回我的旧数组而不做任何修改。 但是,如果我尝试使用pop()删除一个元素,一切似乎都正常 我知道我的remove函数中的过滤器正在返回修改过的数组,但在名为mainArr的数组中它没有得到更新 当我用mainArr.pop()而不是我的代码替换删除功能时,为什么阵列会得到更新 如果将remove函数中的赋值运算符替换为this.mainArr=//过

一直试图通过添加/删除函数更新局部变量(数组)。我能够使用add函数添加项,该函数也更新了我的本地数组,但当我尝试使用代码删除相同的项时,它仍然会返回我的旧数组而不做任何修改。 但是,如果我尝试使用pop()删除一个元素,一切似乎都正常

  • 我知道我的remove函数中的过滤器正在返回修改过的数组,但在名为
    mainArr
    的数组中它没有得到更新

  • 当我用
    mainArr.pop()
    而不是我的代码替换删除功能时,为什么阵列会得到更新

  • 如果将remove函数中的赋值运算符替换为this.mainArr=//过滤器的返回值,代码似乎也能工作

  • 我的remove函数似乎正在创建一个同名的新局部变量
    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,我现在明白了。