js中let與for迴圈輸入問題,為什麼輸出結果如下?

時間 2021-05-31 20:35:10

1樓:kkkKKKi

因為物件是引用基本型別,你可以把它理解成每次呼叫的時候都是使用的同乙個物件,因為這幾個物件共用乙個記憶體位址,所以最後無非就是同乙個物件用了兩次而已。陣列物件用的都是同乙個物件,當然資料就是一樣的了

2樓:善思即行

這裡不涉及作用域相關,主要是涉及到對引用型別變數改變問題。按題主的想法,出來的結果aa因該是順序的i迭代值。關let塊建立塊級作用域,每次迭代,為aa的賦值的確應該是順序的。

但問題就出在了,push.該方法其實就是在陣列末尾新增值,跟a[n]=val。別無二致,但問題是push,也就是賦值到陣列末尾的值是引用。

對物件a賦值,實際是對a位址的拷貝。所以迴圈push到陣列中的值,其實是對a物件位址的push。

關於引用型別值儲存。在程式中執行時,記憶體空間按堆疊方式來儲存變數,對於值型別,在棧中實際儲存了變數值。而對於引用型別,在棧中儲存指向堆中實際的引用型別值。

所以如果對引用型別進行簡單的賦值操作(淺拷貝),實際操作仍然是同乙個變數

3樓:MASK

這和let、for都沒有關係,因為物件是引用型別,你多次push的都是同乙個物件了,迴圈裡操作的a,和前面已經push進去的a,都是同乙個

a === arr[n] 同樣也是true

4樓:Momo

因為 a 是物件,物件是引用型別,所以你每次修改 a.aa 的值的時候,所有的地方都會受到影響,而最後一次修改是 a.aa = 2 ,所以陣列中三個元素都是 。

js中 slice 與 Array prototype slice 有什麼區別

Keita Array.prototype.slice可以被重寫,slice實際用的是Array.prototype.slice,但不能顯式修改.slice,中ownpropertity只有length乙個屬性 Object getOwnPropertyNames Array prototype l...

剛學到js中的dom,我要用迴圈把5個按鈕變為紅色,為什麼不行,一定要用this?

蔡帥哥 我也來湊下熱鬧 var but document.getElementsByTagName input for var i 0 i but.length ifunction ibut i onclick functionbut i value 哈哈 but i style.backgroun...

用for迴圈語句寫乙個在輸入的十個數字中求最大和最小值的python程式應該怎麼寫?

QWERTY l我來乙個行數較少的 max,min float inf float inf for i in range 10 trya float input 請輸入數字 if a minmin a if a maxmax a exceptprint 輸入不正確 print f 最大 print ...