国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

變量提升的原理

Leo_chen / 1193人閱讀

摘要:,此時變量的值為。其實關鍵點就在于,由關鍵字聲明的變量是在編譯階段聲明的,所以會出現(xiàn)變量提升的情況。但是編譯器對語法中的和關鍵字聲明的變量則不會提前聲明,所以不會出現(xiàn)變量提升。

當程序執(zhí)行這一段代碼時

console.log(a);
var a = 2;

有經(jīng)驗的同學都知道控制臺會輸出undefined而不是報錯a is not defined
這是因為此時發(fā)生了變量提升,代碼可以理解為以下形式

var a;
console.log(a);// undefined
a = 2;

這是為什么呢,讓我先說明以下幾點

一段JavaScript代碼,是先由編譯器編譯成可執(zhí)行代碼,再交給引擎去執(zhí)行的。

var關鍵字聲明的變量是在編譯階段聲明的。

每當編譯器遇到var xxx,都會去查找當前作用域是否已存在變量xxx,如果xxx已存在,則忽略該聲明,反之,在當前作用域聲明變量xxx
所以當成程序執(zhí)行下面代碼時

console.log(a);
var a = 2;

首先編譯器查找當前作用域是否存在變量a,發(fā)現(xiàn)a并不存在,聲明變量a

再由引擎執(zhí)行由編譯器生成的代碼console.log(a),此時變量a已經(jīng)被編譯器聲明,但是還未被賦值,所以此時控制臺輸出的值是undefined

a = 2,此時變量a的值為2。

其實關鍵點就在于,由var關鍵字聲明的變量是在編譯階段聲明的,所以會出現(xiàn)變量提升的情況。
但是編譯器對ES6語法中的constlet關鍵字聲明的變量則不會提前聲明,所以不會出現(xiàn)變量提升。

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100159.html

相關文章

  • js-編譯原理與聲明提升

    摘要:編譯原理在傳統(tǒng)編譯語言的流程中,程序中的一段源代碼在執(zhí)行之前會經(jīng)歷三個步驟,統(tǒng)稱為編譯。定義聲明是在編譯階段進行的,而賦值是在執(zhí)行階段進行的。 編譯原理 在傳統(tǒng)編譯語言的流程中,程序中的一段源代碼在執(zhí)行之前會經(jīng)歷三個步驟,統(tǒng)稱為編譯。 詞法分析將由字符組成的字符串分解成(對編程語言來說)有意義的代碼塊,這些代碼塊被稱為詞法單元(token)。 語法分析這個過程是將詞法單元流(數(shù)組)轉...

    zhongmeizhi 評論0 收藏0
  • JavaScript變量提升:函數(shù)提升要比變量提升更猛

    摘要:殊不知不只有聲明才會提前,以這種形式聲明的函數(shù),會被提升到作用域的最最頂部,然后再是變量的提升。具體請看下面例子足以說明函數(shù)提升的更兇一些。 今天,又由一到題目引發(fā)了一場我跟JS基礎的較量:首先是 var getName = function(){alert(1)}; function getName(){alert(2)}; getName();// 1 or function g...

    yanest 評論0 收藏0
  • 體驗jaivascript之美第二課 全局對象、外部環(huán)境、聲明提升

    摘要:全局對象在程序任何地方都能訪問到的對象,在瀏覽器中是變量指向在中是什么外部環(huán)境暫時不講。函數(shù)聲明直接提前。執(zhí)行過程,函數(shù)執(zhí)行和銷毀過程。變量預解析,賦值外部環(huán)境之間的關系。如果做不對,繼續(xù)找,直到合格。 當程序在瀏覽器中運行的時候,js引擎會產(chǎn)生三個東西。 showImg(https://segmentfault.com/img/bVMjv4?w=890&h=422);1.全局對象 ...

    icyfire 評論0 收藏0
  • 【數(shù)據(jù)類型存儲原理】數(shù)據(jù)存儲 - 深度剖析數(shù)據(jù)在內(nèi)存中存儲

    摘要:數(shù)據(jù)的存儲前言數(shù)據(jù)類型匯總整型家族浮點型家族自定義類型指針類型。整型家族注在之后的標準規(guī)定,將類型數(shù)據(jù)劃分為整型家族,因為字符在內(nèi)存中會將其轉化為碼值進行存儲。 ...

    yuanzhanghu 評論0 收藏0
  • 【進階1-2期】JavaScript深入之執(zhí)行上下文棧和變量對象

    摘要:本計劃一共期,每期重點攻克一個面試重難點,如果你還不了解本進階計劃,點擊查看前端進階的破冰之旅本期推薦文章深入之執(zhí)行上下文棧和深入之變量對象,由于微信不能訪問外鏈,點擊閱讀原文就可以啦。 (關注福利,關注本公眾號回復[資料]領取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實戰(zhàn)、面試指導) 本周正式開始前端進階的第一期,本周的主題是調(diào)用堆棧,今天是第二天。 本計劃一共28期,每期...

    Richard_Gao 評論0 收藏0

發(fā)表評論

0條評論

Leo_chen

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<