簡體   English   中英

為什么 JavaScript 原語是不可變的? 這似乎效率低下

[英]Why are JavaScript primitives immutable? This seems inefficient

這本身並不是一個真正的問題,但我正在尋找有關為什么 JavaScript 在重新分配某些內容時會創建新值的信息。

例如,一個for循環:

for(let i = 0; i < 1000; i++)
   console.log(i);

我研究過所有原語都是不可變的,重新分配它們實際上會在內存中創建一個新值,為什么不覆蓋現有地址呢?

一個for循環運行在完成時會創建 100 個未使用的位置,而它本來可以使用 1,這似乎效率低下。這對我來說似乎很奇怪,但我確信它有正當理由嗎?

將原始值重新分配給變量會用原始值的副本覆蓋變量指向的地址處的值。

此循環將覆蓋變量i指向的地址處的值 1000 次。 它不會在內存中分配 1000 個地址。

for(let i = 0; i < 1000; i++) {console.log(i);}

正確的是,如果您將另一個變量的原始值分配給一個變量,則該值將被復制,並且兩個變量將指向內存中的不同位置。 你可以檢查它:

let a = 10;
let b = a; // the value 10 from a gets copied to b
a = 20; // the value 10 gets overwritten by 20 in a
console.log(b); // prints 10

編輯:

直接回答這個問題:說 js 原始值是不可變的,是另一種說法,它們是按值分配的,而不是通過引用分配(或可變)的數組和對象。

每次將原始值分配給變量時是否發生新的內存分配是一個實現細節,但您可以相信它是現代 js 引擎以最有效的方式完成的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM