1 回答

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊
您的問題與參數(shù)的傳遞方式無關(guān)(順便說一句,所有值在JavaScript中始終通過Value傳遞),而與對(duì)象的存儲(chǔ)方式有關(guān)。
在第一個(gè)示例中,與您的問題最相關(guān)的一行是:
arr = temparr;
在這里,您正在設(shè)置第二個(gè)變量,以保留與第一個(gè)變量相同的值,但是對(duì)象變量不保留對(duì)象,它們保留了內(nèi)存中對(duì)象存儲(chǔ)位置。因此,在該行之后,您有兩個(gè)都指向同一個(gè)基礎(chǔ)對(duì)象的變量。如果它們中的任何一個(gè)修改了該基礎(chǔ)對(duì)象,則另一個(gè)將看到相同的東西,因?yàn)樗鼈兌级贾赶蛞粋€(gè)對(duì)象。
在第二個(gè)示例中,您以類似的方式開始:
arr2 = temparr2;
再次,它使您擁有兩個(gè)指向同一基礎(chǔ)對(duì)象的變量。但是,然后執(zhí)行此操作:
temparr2 = [1,2];
它不會(huì)修改一個(gè)基礎(chǔ)對(duì)象,它只是將第二個(gè)變量重新分配給另一個(gè)對(duì)象,現(xiàn)在這兩個(gè)變量不再指向同一對(duì)象。
確實(shí)與說什么沒什么不同:
x = 7;
然后說:
x = 8;
中的舊值x
消失了,并且存儲(chǔ)了一個(gè)全新的值。
如果要修改基礎(chǔ)數(shù)組,則可以通過Array API進(jìn)行,例如:
temparr2.splice(2,1); // Delete one item at index position 2
這就是為什么.push()
在第一個(gè)示例中使用數(shù)組時(shí)會(huì)對(duì)其進(jìn)行修改的原因-在對(duì)象上工作,而不是重新分配變量。
添加回答
舉報(bào)