[英]How is hoisting possible in JavaScript?
如果它是一種解釋語言, JavaScript如何執行提升 。 解釋型語言不是逐行從上到下執行代碼。 是否有任何類型的編譯在后台工作?
“解釋”並不意味着每一行在讀取時都會立即執行。 Javascript解釋器首先讀取整個文件 ,在此過程中,它將信息解析為可執行代碼。 吊裝正在這里發生: 解析和執行之間。
簡而言之,非常簡化,吊裝工作如下:
function
),為此將創建一個新的“范圍對象”* var
關鍵字(或其他相關關鍵字),它會在當前范圍上創建該符號名稱(沒有值/ undefined
) *這里不要過多地閱讀“對象”這個詞,它不是我們談論的Javascript,而是正在編譯中間語言Javascript。
因此,在此過程之后,您將獲得源代碼的一些中間表示,其中定義了作用域並在其上保留了本地符號名稱。 這就是在任何代碼實際執行之前,變量名稱被提升到“頂部”的方式。
解釋語言/腳本語言不僅僅是從上到下執行。 “解釋語言”或“腳本語言”的意思是沒有編譯二進制或相等。 您編寫文本並直接執行此腳本。
根據您選擇的語言,它將具有functions
或classes
甚至loops
,然后它開始不僅僅是從上到下執行。
該腳本分兩個階段執行,在第一階段,解釋器將讀取整個文件,並只執行每個表達式的左側定義......
var x = 5
這里,在第一階段,解釋器將執行左側var x
,因此它將找到當前范圍並定義一個名為x
的變量。
在第二階段,它將執行表達式的右側 , x
將等於5
這就是在JavaScript中完成提升的方式。
所以在JS中你可以用兩種方式定義一個函數:
function
關鍵字定義)因此它在左側,並將被提升。 所以讓我們展示一下:
// This example will work
test();
function test () {
alert('test');
}
和,
// This example will raise an error
test();
var test = function () {
alert();
}
因為在第二個示例中, test
將等於undefined
,因為該函數尚未分配給test
變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.