摘要:復制變量值基本類型在復制變量值的時候,會在變量對象上創建一個新值,然后把該值復制到為新變量分配的位置上。
這篇文章將梳理下環境,作用域鏈,變量對象和活動對象,以及內存管理問題。基本類型和引用類型的值
我們都知道JS中的數據類型有兩大類,基本數據類型和引用數據類型,下面從三個方面來解剖他們
①保存方式
基本類型的值是指簡單的數據段,引用類型的值是指那些可能由多個值構成的對象。
基本類型
按值訪問
可以直接操作保存在變量中實際的值
引用類型
按引用地址訪問
保存在內存中的對象,而JS不能不允許直接訪問內存中的位置,也就是說不能直接操作對象的內存空間,所以說在實際操作過程中操作的是對象的引用,而不是實際的對象。
②復制變量值
基本類型在復制變量值的時候,會在變量對象上創建一個新值,然后把該值復制到為新變量分配的位置上。也就是說基礎類型的值復制給新變量后,會在棧內存中開辟一個新的地址空間去存儲值,原值和復制值參與任何操作都互不影響
引用類型在復制變量值的時候,同樣會在棧內存中開辟一個新的地址空間去存儲值,只不過,引用類型復制的是指針,原值和復制值的指針指向同一堆內存中存儲的值,也就是說著兩個變量實際上將引用同一對象,因此改變其中一個變量,就會影響到另一個變量。
③傳遞參數
先了解一個基本原則,ECMAScript中所有函數的參數都是按值傳遞的,千萬不能覺得在局部作用域中修改的對象會在全局作用域中反映出來,就說明參數是按引用傳遞的。
根據這個原則,如果參數值是基本類型的,在函數內部修改值,并不會影響到函數外部的值,但如果是引用類型的,參數依舊是值傳遞,只不過傳遞的是棧內存的地址值,因此函數內部的修改會影響到函數外部的值。
下面看一個
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/99857.html
閱讀 2082·2021-11-02 14:48
閱讀 2760·2019-08-30 14:19
閱讀 2929·2019-08-30 13:19
閱讀 1297·2019-08-29 16:17
閱讀 3230·2019-08-26 14:05
閱讀 2987·2019-08-26 13:58
閱讀 3075·2019-08-23 18:10
閱讀 1105·2019-08-23 18:04