第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

JS 函數(shù)中如何更新和返回?cái)?shù)組

JS 函數(shù)中如何更新和返回?cái)?shù)組

慕容3067478 2021-08-20 14:39:13
我正在嘗試從函數(shù)內(nèi)部聲明的數(shù)組中添加/刪除元素。我已經(jīng)能夠添加或刪除和訪問(wèn)更新的數(shù)組。為了訪問(wèn)數(shù)組,我使用了兩種不同的方法。創(chuàng)建了一個(gè)返回?cái)?shù)組的內(nèi)部函數(shù)。已從主函數(shù)返回?cái)?shù)組并使用點(diǎn)表示法訪問(wèn)相同的數(shù)組。這是我的代碼:function test() {  let myArr = [];  const getMyArr = () => myArr;  const add = n => {    myArr.push(n);    return () => {      myArr = myArr.filter(a => a !== n);    };  };  return {    myArr,    getMyArr,    add  };}let myTestRun = 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 modificationsconsole.log("getMyArr() after removing", myTestRun.getMyArr()); //returns the modified array. how? Why didn't it work before?我不明白的是為什么沒(méi)有myArr任何修改以及getMyArr()函數(shù)如何返回更新后的值。我曾經(jīng)相信兩者都myArr指向同一個(gè)對(duì)象。因此,對(duì) 的任何修改myArr都應(yīng)通過(guò)這兩種方法反映出來(lái)。為什么我錯(cuò)了。這種不同的返回值背后的原因是什么?請(qǐng)解釋。
查看完整描述

3 回答

?
LEATH

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)容


查看完整回答
反對(duì) 回復(fù) 2021-08-20
?
眼眸繁星

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());


查看完整回答
反對(duì) 回復(fù) 2021-08-20
  • 3 回答
  • 0 關(guān)注
  • 283 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)