第四章 變量、作用域和內(nèi)存問題

1.變量包含兩種不同數(shù)據(jù)類型的值:基本類型值和引用類型值、

①基本類型值:簡單的數(shù)據(jù)段,占據(jù)固定大小的空間,被保存在棧內(nèi)存中;按值訪問;不能添加屬性和方法;復(fù)制其變量值,會創(chuàng)建這個值的一個副本;基本類型值的傳遞和其復(fù)制一樣;確定一個值是那種基本類型可以使用typeof。

②引用類型值:可能由多個值構(gòu)成的對象,保存在堆內(nèi)存中;按引用訪問;可以為其添加屬性和方法,也可以改變和刪除其屬性和方法;復(fù)制其變量值,復(fù)制的是指針,這兩個變量將指向同一個對象;引用類型值的傳遞和其復(fù)制一樣;確定一個值是那種引用類型可以使用instanceof。


2.關(guān)于執(zhí)行環(huán)境的幾點總結(jié):

①執(zhí)行環(huán)境有全局執(zhí)行環(huán)境(全局環(huán)境)和函數(shù)執(zhí)行環(huán)境之分

②每次進入一個新執(zhí)行環(huán)境,都會創(chuàng)建一個用于搜索變量和函數(shù)的作用域鏈

③函數(shù)的局部環(huán)境不僅有權(quán)訪問函數(shù)作用域中的變量,而且有權(quán)訪問其包含(父)環(huán)境,乃至全局環(huán)境

④全局環(huán)境只能訪問在全局環(huán)境中定義的變量和函數(shù),而不能直接訪問局部環(huán)境中的任何數(shù)據(jù);

⑤變量的執(zhí)行環(huán)境有助于確定應(yīng)該何時釋放內(nèi)存


3.對js的垃圾收集例程的總結(jié):

①離開作用域的值將被自動標(biāo)記為可以回收,將在垃圾收集期間被刪除

②標(biāo)記清除:給當(dāng)前不使用的值加上標(biāo)記,然后在回收其內(nèi)存。目前主流的垃圾收集算法

③引用計數(shù):跟蹤記錄所有值被引用的次數(shù)。js引擎目前都不再使用這種算法。當(dāng)代碼中存在循環(huán)引用現(xiàn)象時,“引用計數(shù)”算法就會導(dǎo)致問題

④解除變量的引用不僅有助于消除循環(huán)引用現(xiàn)象,而且對垃圾收集也有好處。為了確保有效地回收內(nèi)存,應(yīng)該及時解除不再使用的全局對象、全局對象屬性以及循環(huán)引用變量的引用。


4.在js中,if語句中的變量聲明會將變量添加到當(dāng)前的執(zhí)行環(huán)境;由for語句創(chuàng)建的變量i即使在循環(huán)執(zhí)行結(jié)束后,也依舊會存在于循環(huán)外部的執(zhí)行環(huán)境中。


5.作用域鏈:當(dāng)代碼在一個環(huán)境中執(zhí)行時,會創(chuàng)建變量對象的一個作用域鏈。

延長作用域鏈的方法:try-catch語句的catch語句;with語句。


6.作用域鏈的作用:保證對執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)的有序訪問。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容