“提升”以及函數(shù)聲明和函數(shù)表達(dá)式

一. 函數(shù)聲明

// 函數(shù)聲明
function funDeclaration(type){ return type==="Declaration"; }

二. 函數(shù)表達(dá)式

// 函數(shù)表達(dá)式
var funExpression = function(type){ return type==="Expression"; }
 
用函數(shù)聲明創(chuàng)建的函數(shù)funDeclaration可以在funDeclaration定義之前就進(jìn)行調(diào)用泛豪;而用函數(shù)表達(dá)式創(chuàng)建的funExpression函數(shù)不能在funExpression被賦值之前進(jìn)行調(diào)用歹叮。
為什么會(huì)這樣呢宅倒?!這就要理解Javascript Function兩種類型的區(qū)別:用函數(shù)聲明創(chuàng)建的函數(shù)可以在函數(shù)解析后調(diào)用(解析時(shí)進(jìn)行等邏輯處理)钦椭;而用函數(shù)表達(dá)式創(chuàng)建的函數(shù)是在運(yùn)行時(shí)進(jìn)行賦值填具,且要等到表達(dá)式賦值完成后才能調(diào)用猾昆。
這個(gè)區(qū)別看似微小肪凛,但在某些情況下確實(shí)是一個(gè)難以發(fā)現(xiàn)的陷阱态蒂。出現(xiàn)這個(gè)陷阱的本質(zhì)原因體現(xiàn)在這兩種類型在Javascript function hoisting(函數(shù)提升)和運(yùn)行時(shí)機(jī)(解析時(shí)/運(yùn)行時(shí))上的差異

三. 提升

誰(shuí)會(huì)被提升

變量聲明:使用var 杭措,let ,const關(guān)鍵字
函數(shù)聲明:使用function(){......}語(yǔ)法
類聲明:使用class關(guān)鍵字

  1. 函數(shù)聲明在函數(shù)作用域內(nèi)創(chuàng)建并初始化一個(gè)變量钾恢。默認(rèn)情況下手素,聲明但是未初始化的變量的值是undefined。
  2. javascript并沒(méi)有嚴(yán)格遵循這個(gè)順序瘩蚪,因此提供了更多的靈活性泉懦。比如:函數(shù)的使用可以在聲明之前。(目前就這個(gè))
var foo;
function foo(){
    console.log(1);
}

foo = function(){
    console.log(2);
}```

會(huì)輸出1二不是2疹瘦!這個(gè)代碼片段會(huì)被引擎理解為如下形式:

function foo(){
console.log(1);
}
foo();//1
foo = function(){
console.log(1);
}
foo();//1


注意:var foo盡管出現(xiàn)在 function foo()...的聲明之前崩哩,但它是重復(fù)的聲明(因此被忽略了),因?yàn)楹瘮?shù)聲明會(huì)被提升到普通變量之前言沐。

盡管**重復(fù)的var** 聲明會(huì)被忽略掉邓嘹,但出現(xiàn)在后面的函數(shù)聲明還是可以**覆蓋**前面的。

##四. 總結(jié)
無(wú)論作用域中的聲明出現(xiàn)在什么地方险胰,都將在代碼本身被執(zhí)行前首先進(jìn)行處理汹押。可以將這個(gè)過(guò)程形象地想象成所有的聲明(變量和函數(shù))都會(huì)被“移動(dòng)”到各自作用域的最頂端起便,這個(gè)過(guò)程被稱為提升鲸阻。

聲明本身會(huì)被提升,而包括函數(shù)表達(dá)式的賦值在內(nèi)的賦值操作并不會(huì)提升缨睡。要注意避免重復(fù)聲明鸟悴,特別是當(dāng)普通的var 聲明和函數(shù)聲明混合在一起的時(shí)候,否則會(huì)引起很多危險(xiǎn)的問(wèn)題奖年!

**參考至《你不知道的Javascript 上卷》**
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末细诸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子陋守,更是在濱河造成了極大的恐慌震贵,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件水评,死亡現(xiàn)場(chǎng)離奇詭異猩系,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)中燥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門寇甸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事拿霉∫髦龋” “怎么了?”我有些...
    開封第一講書人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵绽淘,是天一觀的道長(zhǎng)涵防。 經(jīng)常有香客問(wèn)我,道長(zhǎng)沪铭,這世上最難降的妖魔是什么壮池? 我笑而不...
    開封第一講書人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮杀怠,結(jié)果婚禮上椰憋,老公的妹妹穿的比我還像新娘。我一直安慰自己驮肉,他們只是感情好熏矿,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著离钝,像睡著了一般票编。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卵渴,一...
    開封第一講書人閱讀 50,021評(píng)論 1 291
  • 那天慧域,我揣著相機(jī)與錄音,去河邊找鬼浪读。 笑死于毙,一個(gè)胖子當(dāng)著我的面吹牛节沦,可吹牛的內(nèi)容都是我干的耍鬓。 我是一名探鬼主播碉钠,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼痘拆!你這毒婦竟也來(lái)了仰禽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤纺蛆,失蹤者是張志新(化名)和其女友劉穎吐葵,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桥氏,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡温峭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了字支。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凤藏。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奸忽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出清笨,到底是詐尸還是另有隱情月杉,我是刑警寧澤刃跛,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布抠艾,位于F島的核電站,受9級(jí)特大地震影響桨昙,放射性物質(zhì)發(fā)生泄漏检号。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一蛙酪、第九天 我趴在偏房一處隱蔽的房頂上張望齐苛。 院中可真熱鬧,春花似錦桂塞、人聲如沸凹蜂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)玛痊。三九已至,卻和暖如春狂打,著一層夾襖步出監(jiān)牢的瞬間擂煞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工趴乡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留对省,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓晾捏,卻偏偏與公主長(zhǎng)得像蒿涎,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子惦辛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容