- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- Javascript中Hoisting的作用是什么
今天就跟大家聊聊有關(guān)Javascript中Hoisting的作用是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
Javascript是一門(mén)容易遭人誤解的語(yǔ)言,但是它的強大毋庸置疑。個(gè)人覺(jué)得,要想深入理解Javascript語(yǔ)言,首先必須對其基本的概念(例如:Scope,Closure,Hoisting等)要真正理解。今天想通過(guò)自己的理解來(lái)對Javascript Hoisting(國內一般翻譯為 變量提升)做一個(gè)闡述:
在解釋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 = '內部變量值'; 14 })(); 代碼段1會(huì )在控制臺打印出 變量值 ,很容易理解;代碼段2也會(huì )在控制臺打印出 變量值 ,Javascript編譯器首先在匿名函數內部作用域(Scope)查看變量myvar是否聲明,發(fā)現沒(méi)有,就繼續向上一級的作用域(Scope)查看是否聲明 myvar,發(fā)現存在,即打印出該作用域的myvar值。但代碼段3只是對代碼段2做一個(gè)微調,結果卻輸出了undefine?。?!
在理解代碼段3之前,必須先理解Javascript Hoisting的概念。Javascript Hoisting:In javascript, every variable declaration is hoisted to the top of its declaration context.我的理解就是在Javascript語(yǔ)言中,變量的聲明(注意不包含變量初始化)會(huì )被提升(置頂)到聲明所在的上下文,也就是說(shuō),在變量的作用域內,不管變量在何處聲明,都會(huì )被提升到作用域的頂部,但是變量初始化的順序不變。
下圖的左邊和右邊的代碼輸出結構是一樣的,左邊的代碼段在JS執行時(shí),實(shí)際的執行順序如右邊的代碼所示(JS編譯器會(huì )將變量聲明進(jìn)行提升處理)。
理解了提升的概念之后,再回到開(kāi)頭的代碼段3的理解中來(lái),代碼段3和在被Hositing之后的代碼如下圖所示:
二者輸出的結構都為undefined!可理解為內部變量myvar在匿名函數的內***一行進(jìn)行變量聲明并賦值,但是JS解釋器會(huì )將變量聲明(不包含賦值)提升(Hositing)到匿名函數的***行(頂部),由于只是聲明myvar變量,在執行console.log(myvar)語(yǔ)句時(shí),并未對myvar進(jìn)行賦值,所以JS輸出undefined。
如果變量聲明未提升(Hositing)置頂,則應該會(huì )報錯誤。如下圖所示:
下面給個(gè)測試題,來(lái)看看你對Hositing的概念是否理解:
1 //測試代碼---------------------- 2 var myvar = '變量值'; 3 (function() { 4 console.log(myvar); // ? 5 myvar = '內部變量值'; 6 })();
該代碼段應該輸出什么值呢?
答案是 變量值。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站