JavaScript 堆可以被視為一種對象的集合,這些對象可以被創建、修改和刪除。在 JavaScript 中,所有的對象都被存儲在堆中。當我們定義一個變量并且分配了一個對象給它時,這個對象就會被存儲在堆中。堆還可以用于存儲函數、數組和其他對象。下面我們來看一下堆的相關內容。
堆中存儲的是引用型的數據,我們可以看下面的代碼:
let obj1 = {name: 'Jack'}; let obj2 = obj1;// 把obj1的引用給了obj2 console.log(obj2.name);// 'Jack' obj1.name = 'Lucy';// 修改obj1 console.log(obj2.name);// 'Lucy',因為兩個引用都指向同一個對象
當我們將對象分配給變量時,JavaScript 只是為該變量分配了一個指向該對象的引用。因此,當我們將對象賦值給另一個變量時,它們兩個只是共享該對象,而不是拷貝它。
當我們在添加或刪除對象時,堆的大小會發生變化。通過以下示例,我們將在堆中添加三個對象:
let obj1 = {name: 'Jack'}; let obj2 = {name: 'Lucy'}; let obj3 = {name: 'Tom'}; let arr = [obj1, obj2, obj3];
在上面的代碼中,我們創建了三個對象并將它們添加到數組 arr 中。在這種情況下,JavaScript 引擎會將這些對象存儲在堆中。
當我們使用 delete 操作符刪除對象時,該對象仍然存在于堆中,只不過該對象的引用被刪除了。看下面的例子:
let obj1 = {name: 'Jack'}; let obj2 = obj1;// 把obj1的引用給了obj2 console.log(obj2.name);// 'Jack' delete obj1.name;// 刪除obj1的name屬性 console.log(obj2.name);// undefined
即使在刪除了 obj1 的 name 屬性后,該對象仍然存在于堆中。然而,現在已經無法通過 obj2 訪問該對象的屬性 "name" 了,因為我們剛剛刪除了該屬性。
堆的基本概念特別適用于開發人員編寫 JavaScript 函數。當我們在函數內部聲明新變量時,它們都存儲在堆中。例如:
function myFunction() { let x = 10; }
在上面的代碼中,我們在函數內部聲明了一個名為 x 的變量。在函數執行時,該變量會被存儲在堆中。
總的來說,JavaScript 堆是非常重要的一部分,因為它存儲了所有的對象和數組。了解堆的概念和實際應用,對于編寫高質量的 JavaScript 代碼是非常重要的。
上一篇css中li同行顯示
下一篇java用戶激活和停用