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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么數組值僅在第一個函數之后才更改?

為什么數組值僅在第一個函數之后才更改?

幕布斯7119047 2023-08-05 20:40:52
我有一個反轉數組的函數:function reverseArray(array) {  for(let i = 0; i <= Math.floor(array.length / 2); i++) {    let old = array[array.length - 1 - i];    array[array.length - 1 - i] = array[i];    array[i] = old;  }  return array;}以及一個創(chuàng)建本地范圍數組并按相反順序推送值的函數:function reverseArr(arr) {  let output = [];  for(let i of arr) {    output.unshift(i);  }  arr = output;  return arr;}假設有一個元素:let arrayValue = [1, 2, 3, 4, 5];如果我使用 arrayValue 作為參數調用第一個函數,則 arrayValue 會更改:reverseArray(arrayValue); // [5, 4, 3, 2, 1]console.log(arrayValue); // [5, 4, 3, 2, 1]但是,如果我使用 arrayValue 調用第二個函數:reverseArr(arrayValue); //[5, 4, 3, 2, 1]console.log(arrayValue); //[1, 2, 3, 4, 5]即使我在返回之前將相反的值分配給參數, arrayValue 也不會更改:arr = output;有人可以解釋一下為什么嗎?
查看完整描述

3 回答

?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

基本上你用一個新數組


let output = [];

然后將新數組分配給參數arr


arr = output;

現在您有兩個對象引用,一個arr是外部作用域,另一個是新的output.


為了克服這個問題,您需要保留 的對象引用array。要在現有數組中獲取新內容,您可以清空數組并推送新數組的值。


arr.length = 0;

arr.push(...output);


查看完整回答
反對 回復 2023-08-05
?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

當你這樣做時,arr = outputreverseArr指的是一個新數組。換句話說,arrayValue在外部上下文中并arr指的是兩個不同的對象。

您無法更改調用該函數所使用的變量的值。如果你有一個對象的引用,你可以改變它,但你不能讓外部變量引用另一個對象。


查看完整回答
反對 回復 2023-08-05
?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

基本上,您的第一個函數就地反轉列表(即直接對列表本身進行操作,而不構建新列表),而第二個函數通過構建內容相反的新列表來異地反轉列表的原始列表。

就地工作時,您在array函數內部所做的更改將直接應用于arrayValue.

無法按您預期的方式工作的原因arr = output幾乎與其他答案所指的相同。即,arrarrayValue是兩個不同的引用(“指針”)。最初,當調用該函數時,arrayValue和都arr“指向”同一個數組。然而,arr = outputarr指向新建的列表output。


查看完整回答
反對 回復 2023-08-05
  • 3 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號