Javascript中的“域”、“預”、“譯”,你真的掌握了嗎?
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
一、作用域的概念1、作用域有三種:全局作用域、函數作用域、塊級作用域。(模塊作用域) (1)全局作用域:這時最高級別的作用域,在這定義的函數以及變量可以在代碼的所有地方被訪問。在瀏覽器的環境中,全局變量實際是window對象的屬性。例如:
(2)函數作用域(局部作用域):在每個函數內部聲明的變量(未使用const、let關鍵字)、function聲明的函數,這些對象具有局部作用域,它們只可以在函數內部訪問。例如:
(3)塊級作用域:這個作用域是在ES6引入了let和const關鍵字,避免因var聲明的變量的變量提升(接下來會進行解釋)現象,導致的讓人匪夷所思的行為。這個作用域可以簡單的理解為:{} + let/const例如:
注:(1) 以上作用域所指的是全局內、函數體內、塊內的域,而詞法作用域則是變量聲明的地方,注意不是調用的地方。例如:我們的寢室是一個域,則該域的詞法作用域就是這一棟寢室樓。 (2)欺騙詞法作用域:
2、聲明提升的概念與示例 概念:在變量聲明和函數聲明在代碼執行前被提升,或者說移到,其包含的作用域的頂部的過程,發生在JS的編譯階段,導致了變量和函數可以在被聲明之前就被訪問。
即使函數
二、“預備與編譯”--預編譯的概念1、預編譯發生在代碼被執行之前,是JS引擎對代碼的預處理,保證了變量和函數在使用之前已經被正確的設置。 2、全局預編譯: (1)創建全局執行上下文GO(Global Object)。 (2)尋找變量聲明,變量名作為GO的屬性名,值為undefined。 (3)在全局找函數聲明,函數名作為GO的屬性名,值為函數體 畫圖實例:
3、函數中的預編譯 (1)創建函數的執行上下文對象AO(Activation Object)。 (2)找到形參和變量聲明,將形參和變量聲明作為AO的屬性名,值為undefined。 (3)將實參和形參統一 (4)在函數體內找到函數聲明,將函數名作為AO的屬性名,值為函數體。 畫圖實例: 注: 以上的執行上下文是被放在一個棧內,AO對象被放在變量環境中。在執行上下文中除了變量環境外,還有一個詞法環境,用于 畫圖實例:
該文章在 2024/5/29 10:44:20 編輯過 |
關鍵字查詢
相關文章
正在查詢... |