作用域鏈

參考文檔:《深入理解javascript原型和閉包系列

我們來看如下的代碼:

var num = 20;
function f1() {
  console.log(num); // undefined
  var num = 10;
  console.log(num); // 10
}
f1();

==很奇怪為什么,第一個(gè)打印num的結(jié)果不是 20脐往?為什么第二個(gè)又是10?==

這里先引出一個(gè)基本知識(shí),==javascript中沒有塊級(jí)作用域的概念,只有全局作用域股耽,和函數(shù)作用域==根盒。

  1. 所謂作用域,通俗的可以理解為一個(gè)地盤物蝙,里面的函數(shù)炎滞、變量、常量都屬于這個(gè)作用域诬乞;

全局作用域是指函數(shù)册赛、變量、常量等對(duì)象的作用范圍在整個(gè)應(yīng)用程序中都是可用的丽惭。在全局作用域內(nèi)定義的對(duì)象被稱之為全局對(duì)象击奶。例如,在全局作用域內(nèi)定義的函數(shù)被稱為全局函數(shù)责掏,在全局作用域內(nèi)定義的變量稱之為全局變量。全局對(duì)象的生命期開始于應(yīng)用程序的運(yùn)行湃望,結(jié)束于應(yīng)用程序的退出换衬。

函數(shù)作用域則可以理解為函數(shù)大括號(hào)所囊括的地盤,里面的函數(shù)证芭、變量瞳浦、常量只在這個(gè)范圍內(nèi)可用。

我們回到開頭的例子废士,調(diào)用f1()時(shí)叫潦,進(jìn)行了哪些準(zhǔn)備工作;

  • 變量官硝、函數(shù)表達(dá)式——變量聲明矗蕊,默認(rèn)賦值為undefined;
  • this——賦值氢架;
  • 函數(shù)聲明——賦值傻咖;

所以我們?cè)趫?zhí)行 f(); 其實(shí)做了相當(dāng)于如下的過程:

function f1() {
  var num;
  console.log(num); // undefined
  num = 10;
  console.log(num); // 10
}

先對(duì) num 進(jìn)行了聲明,但是沒有賦值岖研;

那么為什么 num 使用的不是 全局作用域里的 num = 20 呢卿操?

因?yàn)?==子作用域中的變量?jī)?yōu)先級(jí)比父親作用域的中優(yōu)先級(jí)高,當(dāng)子作用域中沒有這個(gè)變量是才會(huì)去父作用域中尋找==所以孙援,第一行輸出結(jié)果會(huì)是undefined害淤,第二行結(jié)果是10;

var a = 1
function fn1(){
  function fn3(){
    var a = 4
    fn2()
  }
  var a = 2
  return fn3
}
function fn2(){
  console.log(a)
}
var fn = fn1()
fn() //   輸出  1

最后我們看看上面的例子拓售,結(jié)果會(huì)是1 窥摄,因?yàn)?fn2() 是屬于全局作用域的,自身作用域中沒有a 變量所以會(huì)去邻辉,全局作用域?qū)ふ摇?/p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末溪王,一起剝皮案震驚了整個(gè)濱河市腮鞍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌莹菱,老刑警劉巖移国,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異道伟,居然都是意外死亡迹缀,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門蜜徽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祝懂,“玉大人,你說我怎么就攤上這事拘鞋⊙馀睿” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵盆色,是天一觀的道長(zhǎng)灰蛙。 經(jīng)常有香客問我,道長(zhǎng)隔躲,這世上最難降的妖魔是什么摩梧? 我笑而不...
    開封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮宣旱,結(jié)果婚禮上仅父,老公的妹妹穿的比我還像新娘。我一直安慰自己浑吟,他們只是感情好笙纤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著买置,像睡著了一般粪糙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上忿项,一...
    開封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天蓉冈,我揣著相機(jī)與錄音,去河邊找鬼轩触。 笑死寞酿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脱柱。 我是一名探鬼主播伐弹,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼榨为!你這毒婦竟也來了惨好?” 一聲冷哼從身側(cè)響起煌茴,我...
    開封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎日川,沒想到半個(gè)月后蔓腐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡龄句,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年回论,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片分歇。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡傀蓉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出职抡,到底是詐尸還是另有隱情葬燎,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布缚甩,位于F島的核電站萨蚕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蹄胰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一奕翔、第九天 我趴在偏房一處隱蔽的房頂上張望裕寨。 院中可真熱鬧,春花似錦派继、人聲如沸宾袜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)庆猫。三九已至,卻和暖如春绅络,著一層夾襖步出監(jiān)牢的瞬間月培,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工恩急, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留杉畜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓衷恭,卻偏偏與公主長(zhǎng)得像此叠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子随珠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

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