摘要:函數(shù)聲明被提升時(shí),聲明和賦值兩個(gè)步驟都會(huì)被提升,而普通變量卻只能提升聲明步驟,而不能提升賦值步驟。變量被提升過后,先對(duì)提升上來的所有對(duì)象統(tǒng)一執(zhí)行一遍聲明步驟,然后再對(duì)變量執(zhí)行一次賦值步驟。
專欄剛剛開通, 先把自己以前寫的一些沒人看的答案搬運(yùn)過來填補(bǔ)一下空白.
變量的問題,莫過于聲明和賦值兩個(gè)步驟,而這兩個(gè)步驟是分開的。
函數(shù)聲明被提升時(shí),聲明和賦值兩個(gè)步驟都會(huì)被提升,
而普通變量卻只能提升聲明步驟,而不能提升賦值步驟。
變量被提升過后,先對(duì)提升上來的所有對(duì)象統(tǒng)一執(zhí)行一遍聲明步驟,
然后再對(duì)變量執(zhí)行一次賦值步驟。
而執(zhí)行賦值步驟時(shí),會(huì)優(yōu)先執(zhí)行函數(shù)變量的賦值步驟,再執(zhí)行普通變量的賦值步驟。
當(dāng)你明白這三點(diǎn)后,一切都豁然開朗了。
首先來看一個(gè)DEMO:
(function(){ function a(){}; var a; alert(typeof a); //function })();
先提升兩個(gè)a,然后執(zhí)行函數(shù)的賦值步驟,a沒有被賦值,故結(jié)果為function
再看一個(gè):
(function(){ alert(typeof a);//function function a(){}; var a = 1; })();
先提升兩個(gè)a,再執(zhí)行函數(shù)的賦值步驟,
因?yàn)樵赼lert語句執(zhí)行以前,還未執(zhí)行a = 1的賦值步驟,函數(shù)不會(huì)被覆蓋,故為function
來個(gè)最有說服力的:
(function(){ var a = 1; function a(){}; alert(typeof a); //number })();
在alert語句執(zhí)行之前,a = 1步驟和函數(shù)賦值步驟均已執(zhí)行,
而且函數(shù)還在a = 1賦值語句之后,但是仍然輸出number,
就是因?yàn)楹瘮?shù)的賦值步驟會(huì)先于a = 1的賦值步驟,函數(shù)被覆蓋,故輸出number。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/80691.html
摘要:換句話說,在代碼執(zhí)行之前,會(huì)對(duì)作用域鏈中所有變量和函數(shù)聲明先處理完先。總結(jié)一句話就是只有聲明被提升,而賦值或其他運(yùn)算會(huì)留在原地。為其聲明變量隱性劫持到所在區(qū)域中。 之前一直覺會(huì)認(rèn)為javascript代碼執(zhí)行是由上到下一行行執(zhí)行的。自從看了《你不知道的JS》后發(fā)現(xiàn)這個(gè)觀點(diǎn)并不完全正確。先來給大家舉一個(gè)書本上的的例子: var a=hello world; var a; co...
摘要:事實(shí)上,實(shí)現(xiàn)元編程有多種方式,從語言本身來講,可以分為兩類增強(qiáng)型與新的語法實(shí)現(xiàn),前者的代表是反射,后者的代表為。在第二部分,我們嘗試在語言基礎(chǔ)上增加原生的元編程能力并介紹了該思路的實(shí)現(xiàn)框架。 語言的自由度 自由度這個(gè)概念在不同領(lǐng)域有不同的定義,我們借鑒數(shù)學(xué)中構(gòu)成一個(gè)空間的維數(shù)來表達(dá)其自由度的做法,在此指的是:解決同一個(gè)問題彼此不相關(guān)的設(shè)計(jì)方法學(xué)數(shù)量。 例如,解決一個(gè)比如商品打折的問題,...
摘要:事實(shí)上,實(shí)現(xiàn)元編程有多種方式,從語言本身來講,可以分為兩類增強(qiáng)型與新的語法實(shí)現(xiàn),前者的代表是反射,后者的代表為。在第二部分,我們嘗試在語言基礎(chǔ)上增加原生的元編程能力并介紹了該思路的實(shí)現(xiàn)框架。 語言的自由度 自由度這個(gè)概念在不同領(lǐng)域有不同的定義,我們借鑒數(shù)學(xué)中構(gòu)成一個(gè)空間的維數(shù)來表達(dá)其自由度的做法,在此指的是:解決同一個(gè)問題彼此不相關(guān)的設(shè)計(jì)方法學(xué)數(shù)量。 例如,解決一個(gè)比如商品打折的問題,...
摘要:但是碰到聲明提升,這種想法就會(huì)被打破。聲明一個(gè)函數(shù)進(jìn)行相應(yīng)的操作,會(huì)得到函數(shù)聲明提升的結(jié)果。由此可以發(fā)現(xiàn)變量和函數(shù)的聲明都會(huì)被提升在其他代碼的前面執(zhí)行。一個(gè)普通塊內(nèi)部的函數(shù)聲明通常會(huì)被提升到所在的作用域的頂部。的創(chuàng)建初始化和賦值均會(huì)被提升。 Javascript聲明提升 在分析聲明提升之前,我認(rèn)為有必要知道的兩點(diǎn): 一、引擎查詢變量的兩種方式 引擎查詢變量的方式可以分為L(zhǎng)HS和RHS兩...
閱讀 1269·2019-08-30 12:49
閱讀 3112·2019-08-28 18:14
閱讀 821·2019-08-26 11:38
閱讀 1676·2019-08-23 18:23
閱讀 2822·2019-08-23 17:04
閱讀 500·2019-08-23 16:52
閱讀 4018·2019-08-23 16:43
閱讀 2769·2019-08-23 16:12