JavaScript 之 作用域 (筆記)

????????作用域(scope)馏鹤,程序設(shè)計概念砖织,通常來說款侵,一段程序代碼中所用到的名字并不總是有效/可用的,而限定這個名字的可用性的代碼范圍就是這個名字的作用域镶苞。

? ? ? ? 在理解前喳坠,先提及幾個名詞:全局變量,局部變量茂蚓,變量提升壕鹉,聲明,賦值聋涨,樹晾浴;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 為什么?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?肯定是因為這幾個詞對作用域的理解有關(guān)半拱住脊凰!


????????對于作用域概念的理解,廢話不多說茂腥,直接上題:

題1

? ? ? ? 1.先對以上代碼進行拆分狸涌;

a.

? ? ? ? 2.局部變量:只作用于它所在的作用域內(nèi);而下圖局部變量 a 存在于 f1 函數(shù)內(nèi)最岗,所以局部變量a 的作用范圍僅限于 f1 函數(shù)內(nèi)帕胆,局部變量 a 的作用域就是 f1 函數(shù);

b.

? ? ? ? 3.根據(jù) 圖a. 圖b. 理解般渡,那么 a 是多少懒豹??

????????????????A. a = 1? ? ? ?

? ? ? ? ? ? ? ? B. a = 2

? ? ? ? ? ? ? ? C. undefined

? ? ? ? ? ? ? ? 答案:C.undefined

????????出乎意料嗎?竟然是 undefined 驯用,如果對該答案感到疑惑脸秽,那肯定是忽略了變量提升,以及JavaScript 程序的執(zhí)行單位為行(line)蝴乔,也就是一行一行地執(zhí)行记餐。

? ? ? ? 由于是在作用域 f1 函數(shù)內(nèi),那么全局變量 a 可以排除了薇正,所以 A 答案是錯的剥扣,這個好理解巩剖,那 B 答案是錯的該如何理解呢?

? ? ? ? 首先钠怯,先理解變量提升佳魔;

? ??????JavaScript 引擎的工作方式是,先解析代碼晦炊,獲取所有被聲明的變量鞠鲜,然后再一行一行地運行。這造成的結(jié)果断国,就是所有的變量的聲明語句贤姆,都會被提升到代碼的頭部,這就叫做變量提升(hoisting)稳衬。

? ? ? ? 這也就是為何要先開始第一步:拆分代碼霞捡;

? ??????變量的聲明和賦值,是分開的兩個步驟薄疚,只是聲明變量而沒有賦值碧信,則該變量的值是undefined。

? ? ? ? var a = 2 是在 alert ( a ) 之后街夭,所以 alert ( a ) 此時所求的 a 僅聲明未賦值砰碴,所以,正確的答案是 undefined 板丽。


? ? ? ? 那么呈枉,如果 f1 函數(shù)中沒有聲明 a 及賦值 a ,那 alert ( a ) 所求的 a 值則取至于全局變量 a 埃碱,這里就引申出另一個概念 樹 猖辫。可以這么理解,當 f1 函數(shù)內(nèi)不存在所需變量時砚殿,便會向父級調(diào)用變量啃憎。



題2.

? ? ? ? 1.依舊先變量提升;

c.

? ? ? ? 2.求console.log ( a )瓮具,由于 f2 函數(shù)內(nèi)無變量荧飞,向父級調(diào)用變量凡人,而?f1 函數(shù)沒包含 f2 函數(shù)名党,所以 f1 函數(shù)不是 f2 函數(shù)的父級,所以 f2 函數(shù)調(diào)用的變量為全局變量 a 挠轴,也就是 a = 1 传睹,所以得console.log ( a ) 的值為1。?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末岸晦,一起剝皮案震驚了整個濱河市欧啤,隨后出現(xiàn)的幾起案子睛藻,更是在濱河造成了極大的恐慌,老刑警劉巖邢隧,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件店印,死亡現(xiàn)場離奇詭異,居然都是意外死亡倒慧,警方通過查閱死者的電腦和手機按摘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纫谅,“玉大人炫贤,你說我怎么就攤上這事「讹酰” “怎么了兰珍?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長询吴。 經(jīng)常有香客問我掠河,道長,這世上最難降的妖魔是什么汰寓? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任口柳,我火速辦了婚禮,結(jié)果婚禮上有滑,老公的妹妹穿的比我還像新娘跃闹。我一直安慰自己,他們只是感情好毛好,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布望艺。 她就那樣靜靜地躺著,像睡著了一般肌访。 火紅的嫁衣襯著肌膚如雪找默。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天吼驶,我揣著相機與錄音惩激,去河邊找鬼。 笑死蟹演,一個胖子當著我的面吹牛风钻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酒请,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼骡技,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起布朦,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤囤萤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后是趴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涛舍,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年唆途,在試婚紗的時候發(fā)現(xiàn)自己被綠了做盅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡窘哈,死狀恐怖吹榴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情滚婉,我是刑警寧澤图筹,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站让腹,受9級特大地震影響远剩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜骇窍,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一瓜晤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腹纳,春花似錦痢掠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至佃牛,卻和暖如春淹辞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背俘侠。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工象缀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人爷速。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓央星,卻偏偏與公主長得像,于是被迫代替她去往敵國和親遍希。 傳聞我的和親對象是個殘疾皇子等曼,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354