摘要:,此時變量的值為。其實關鍵點就在于,由關鍵字聲明的變量是在編譯階段聲明的,所以會出現(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語法中的const和let關鍵字聲明的變量則不會提前聲明,所以不會出現(xiàn)變量提升。
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100159.html
摘要:編譯原理在傳統(tǒng)編譯語言的流程中,程序中的一段源代碼在執(zhí)行之前會經(jīng)歷三個步驟,統(tǒng)稱為編譯。定義聲明是在編譯階段進行的,而賦值是在執(zhí)行階段進行的。 編譯原理 在傳統(tǒng)編譯語言的流程中,程序中的一段源代碼在執(zhí)行之前會經(jīng)歷三個步驟,統(tǒng)稱為編譯。 詞法分析將由字符組成的字符串分解成(對編程語言來說)有意義的代碼塊,這些代碼塊被稱為詞法單元(token)。 語法分析這個過程是將詞法單元流(數(shù)組)轉...
摘要:殊不知不只有聲明才會提前,以這種形式聲明的函數(shù),會被提升到作用域的最最頂部,然后再是變量的提升。具體請看下面例子足以說明函數(shù)提升的更兇一些。 今天,又由一到題目引發(fā)了一場我跟JS基礎的較量:首先是 var getName = function(){alert(1)}; function getName(){alert(2)}; getName();// 1 or function g...
摘要:全局對象在程序任何地方都能訪問到的對象,在瀏覽器中是變量指向在中是什么外部環(huán)境暫時不講。函數(shù)聲明直接提前。執(zhí)行過程,函數(shù)執(zhí)行和銷毀過程。變量預解析,賦值外部環(huán)境之間的關系。如果做不對,繼續(xù)找,直到合格。 當程序在瀏覽器中運行的時候,js引擎會產(chǎn)生三個東西。 showImg(https://segmentfault.com/img/bVMjv4?w=890&h=422);1.全局對象 ...
摘要:數(shù)據(jù)的存儲前言數(shù)據(jù)類型匯總整型家族浮點型家族自定義類型指針類型。整型家族注在之后的標準規(guī)定,將類型數(shù)據(jù)劃分為整型家族,因為字符在內(nèi)存中會將其轉化為碼值進行存儲。 ...
摘要:本計劃一共期,每期重點攻克一個面試重難點,如果你還不了解本進階計劃,點擊查看前端進階的破冰之旅本期推薦文章深入之執(zhí)行上下文棧和深入之變量對象,由于微信不能訪問外鏈,點擊閱讀原文就可以啦。 (關注福利,關注本公眾號回復[資料]領取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實戰(zhàn)、面試指導) 本周正式開始前端進階的第一期,本周的主題是調(diào)用堆棧,今天是第二天。 本計劃一共28期,每期...
閱讀 3012·2021-10-27 14:15
閱讀 2999·2021-09-07 10:18
閱讀 1320·2019-08-30 15:53
閱讀 1570·2019-08-26 18:18
閱讀 3373·2019-08-26 12:15
閱讀 3460·2019-08-26 10:43
閱讀 654·2019-08-23 16:43
閱讀 2207·2019-08-23 15:27