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