溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Javascript中Hoisting的作用是什么

發(fā)布時間:2021-07-01 17:35:30 來源:億速云 閱讀:258 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關Javascript中Hoisting的作用是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

Javascript是一門容易遭人誤解的語言,但是它的強大毋庸置疑。個人覺得,要想深入理解Javascript語言,首先必須對其基本的概念(例如:Scope,Closure,Hoisting等)要真正理解。今天想通過自己的理解來對Javascript Hoisting(國內(nèi)一般翻譯為 變量提升)做一個闡述:

在解釋Javascript Hoisting之前,先看一下幾段代碼:

 1     //代碼段1--------------------------
 2     var myvar = '變量值'; 
 3     console.log(myvar); // 變量值
 4     //代碼段2--------------------------
 5     var myvar = '變量值';  
 6     (function() { 
 7       console.log(myvar); //變量值
 8     })();
 9     //代碼段3----------------------------
10     var myvar = '變量值'; 
11     (function() { 
12       console.log(myvar); // undefined 
13       var myvar = '內(nèi)部變量值'; 
14     })();    代碼段1會在控制臺打印出 變量值 ,很容易理解;代碼段2也會在控制臺打印出 變量值 ,Javascript編譯器首先在匿名函數(shù)內(nèi)部作用域(Scope)查看變量myvar是否聲明,發(fā)現(xiàn)沒有,就繼續(xù)向上一級的作用域(Scope)查看是否聲明 myvar,發(fā)現(xiàn)存在,即打印出該作用域的myvar值。但代碼段3只是對代碼段2做一個微調(diào),結果卻輸出了undefine?。?!

在理解代碼段3之前,必須先理解Javascript Hoisting的概念。Javascript Hoisting:In javascript, every variable declaration is hoisted to the top of its declaration context.我的理解就是在Javascript語言中,變量的聲明(注意不包含變量初始化)會被提升(置頂)到聲明所在的上下文,也就是說,在變量的作用域內(nèi),不管變量在何處聲明,都會被提升到作用域的頂部,但是變量初始化的順序不變。

下圖的左邊和右邊的代碼輸出結構是一樣的,左邊的代碼段在JS執(zhí)行時,實際的執(zhí)行順序如右邊的代碼所示(JS編譯器會將變量聲明進行提升處理)。

Javascript中Hoisting的作用是什么

理解了提升的概念之后,再回到開頭的代碼段3的理解中來,代碼段3和在被Hositing之后的代碼如下圖所示:

Javascript中Hoisting的作用是什么

二者輸出的結構都為undefined!可理解為內(nèi)部變量myvar在匿名函數(shù)的內(nèi)***一行進行變量聲明并賦值,但是JS解釋器會將變量聲明(不包含賦值)提升(Hositing)到匿名函數(shù)的***行(頂部),由于只是聲明myvar變量,在執(zhí)行console.log(myvar)語句時,并未對myvar進行賦值,所以JS輸出undefined。

如果變量聲明未提升(Hositing)置頂,則應該會報錯誤。如下圖所示:

Javascript中Hoisting的作用是什么

  下面給個測試題,來看看你對Hositing的概念是否理解:

Javascript中Hoisting的作用是什么

1     //測試代碼----------------------
2     var myvar = '變量值'; 
3     (function() { 
4       console.log(myvar); // ?
5       myvar = '內(nèi)部變量值'; 
6     })();

Javascript中Hoisting的作用是什么

該代碼段應該輸出什么值呢?

Javascript中Hoisting的作用是什么

答案是 變量值。

看完上述內(nèi)容,你們對Javascript中Hoisting的作用是什么有進一步的了解嗎?如果還想了解更多知識或者相關內(nèi)容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI