你不知道的JavaScript(四)|作用域和閉包

提升

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

相當(dāng)于

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

相當(dāng)于

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

這個(gè)過程就好像變量和函數(shù)聲明從它們?cè)诖a中出現(xiàn)的位置被“移動(dòng)”到了最上面膀斋。這個(gè)過程就叫做提升淡溯。
只有聲明本身會(huì)被提升兵琳,而賦值或其他運(yùn)行邏輯會(huì)留在原地。如果提升改變了代碼執(zhí)行的順序硕噩,會(huì)造成非常嚴(yán)重的破壞假残。
函數(shù)聲明會(huì)被提升,但是函數(shù)表達(dá)式卻不會(huì)被提升炉擅。如:

 foo();// 不是ReferenceError, 而是TypeError!
 var foo=function bar() {
      console.log(a); // undefined
      var a = 2;
 }

以上程序中的變量標(biāo)識(shí)符foo()被提升并分配給所在作用域(在這里是全局作用域)辉懒,因此foo()不會(huì)導(dǎo)致ReferenceError。但是foo此時(shí)并沒有賦值(如果它是一個(gè)函數(shù)聲明而不是函數(shù)表達(dá)式谍失,那么就會(huì)賦值)眶俩。foo()由于對(duì)undefined值進(jìn)行函數(shù)調(diào)用而導(dǎo)致非法操作,因此拋出TypeError異常快鱼。

foo(); // TypeError
bar(); // ReferenceError
var foo = function bar() {
  // ...
};

改為:

var foo;
foo(); // TypeError
bar(); // ReferenceError
foo = function() {
  var bar = ...self...
  // ...
}

函數(shù)優(yōu)先
函數(shù)聲明和變量聲明都會(huì)被提升颠印。但是一個(gè)值得注意的細(xì)節(jié)(這個(gè)細(xì)節(jié)可以出現(xiàn)在有多個(gè)“重復(fù)”聲明的代碼中)是函數(shù)會(huì)首先被提升,然后才是變量抹竹。

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

這個(gè)代碼片段會(huì)被引擎理解為:

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

注意嗽仪,var foo盡管出現(xiàn)在function foo()...的聲明之前,但它是重復(fù)的聲明(因此被忽略了)柒莉,因?yàn)楹瘮?shù)聲明會(huì)被提升到普通變量之前。
盡管重復(fù)的var聲明會(huì)被忽略掉沽翔,但出現(xiàn)在后面的函數(shù)聲明還是可以覆蓋前面的:

foo(); // 3
function foo() {
  console.log( 1 );
}
var foo = function() {
  console.log( 2 );
};
function foo() {
  console.log( 3 );
}
但愿人長(zhǎng)久,千里共嬋娟
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末兢孝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子仅偎,更是在濱河造成了極大的恐慌跨蟹,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件橘沥,死亡現(xiàn)場(chǎng)離奇詭異窗轩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)座咆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門痢艺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人介陶,你說我怎么就攤上這事堤舒。” “怎么了哺呜?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵舌缤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng)国撵,這世上最難降的妖魔是什么陵吸? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮介牙,結(jié)果婚禮上壮虫,老公的妹妹穿的比我還像新娘。我一直安慰自己耻瑟,他們只是感情好旨指,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著喳整,像睡著了一般谆构。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上框都,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天搬素,我揣著相機(jī)與錄音,去河邊找鬼魏保。 笑死熬尺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谓罗。 我是一名探鬼主播粱哼,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼檩咱!你這毒婦竟也來了揭措?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤刻蚯,失蹤者是張志新(化名)和其女友劉穎绊含,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炊汹,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡躬充,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了讨便。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片充甚。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖器钟,靈堂內(nèi)的尸體忽然破棺而出津坑,到底是詐尸還是另有隱情,我是刑警寧澤傲霸,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布疆瑰,位于F島的核電站眉反,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏穆役。R本人自食惡果不足惜寸五,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望耿币。 院中可真熱鬧梳杏,春花似錦、人聲如沸淹接。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)塑悼。三九已至劲适,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間厢蒜,已是汗流浹背霞势。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留斑鸦,地道東北人愕贡。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像巷屿,于是被迫代替她去往敵國(guó)和親固以。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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

  • 《你不知道的JavaScript》真的是一本好書嘱巾,閱讀這本書嘴纺,我有多次“哦,原來是這樣”的感覺浓冒,以前自以為理解了(...
    然并阮閱讀 621評(píng)論 2 9
  • 最近看了《你不知道的JavaScript》這本書的上卷,感覺相當(dāng)不錯(cuò)尖坤,一些以前模糊不清的感念從這本書里都弄懂了稳懒,下...
    劉尐六閱讀 348評(píng)論 0 3
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券慢味,享受所有官網(wǎng)優(yōu)惠场梆,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 2,303評(píng)論 0 21
  • 1. 最近正是各種美味水果成熟的季節(jié),如果說有什么水果一直在我心目中有獨(dú)特地位的那莫非嵊州的桃形李莫屬了纯路。 相傳孫...
    小羊的海閱讀 541評(píng)論 0 1
  • 目錄 下一章 白公館人仰馬翻找了大半晚或油,也沒找到這個(gè)白二少,白大少知道后驰唬,沉吟半響顶岸,才電話里說腔彰,“你們不要找了,...
    雪拈憶閱讀 301評(píng)論 0 1