深入學(xué)習(xí)JavaScript-作用域問題

作用域


執(zhí)行環(huán)境:簡稱環(huán)境辨萍,定義了變量或函數(shù)有權(quán)訪問的其他數(shù)據(jù)谜嫉,決定了它們各自的行為闹击。

變量對(duì)象:每個(gè)執(zhí)行環(huán)境都有一個(gè)與之關(guān)聯(lián)的變量對(duì)象镶蹋,環(huán)境中定義的所有變量和函數(shù)都保存在這個(gè)對(duì)象中。這個(gè)對(duì)象無法通過代碼訪問赏半,但解析器在處理數(shù)據(jù)時(shí)會(huì)使用贺归。

環(huán)境棧:每個(gè)函數(shù)都有自己的執(zhí)行環(huán)境,當(dāng)執(zhí)行流進(jìn)入一個(gè)函數(shù)時(shí)除破,函數(shù)的環(huán)境就回被推入一個(gè)環(huán)境棧中牧氮,當(dāng)這個(gè)函數(shù)執(zhí)行后,棧將其環(huán)境彈出瑰枫。把控制權(quán)返回給之前的執(zhí)行環(huán)境踱葛。

作用域鏈:當(dāng)代碼在環(huán)境中執(zhí)行時(shí)丹莲,會(huì)創(chuàng)建變量對(duì)象的一個(gè)作用域鏈。作用域鏈的用途是保證對(duì)執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)的有序訪問尸诽。作用域鏈的前端甥材,始終都是當(dāng)前執(zhí)行的代碼所在環(huán)境的變量對(duì)象。

作用域鏈中的下一個(gè)變量對(duì)象來自包含環(huán)境性含,而再下一個(gè)變量對(duì)象則來自下一個(gè)包含環(huán)境洲赵。這樣一直延續(xù)到全局執(zhí)行環(huán)境,全局執(zhí)行環(huán)境的變量對(duì)象始終都是作用域鏈中的最后一個(gè)對(duì)象

標(biāo)識(shí)符解析:標(biāo)識(shí)符解析是沿著作用域鏈一級(jí)一級(jí)地搜索標(biāo)識(shí)符過程商蕴。搜索過程始終從作用域鏈的前端開始叠萍,逐級(jí)向后回溯,直至找到標(biāo)識(shí)符绪商。(找不到會(huì)報(bào)錯(cuò))

延長作用域

:雖執(zhí)行環(huán)境的類型總共有兩種--全局和局部苛谷,但可以通過其他辦法來延長作用域。因?yàn)橛行┱Z句可以在作用域鏈前端臨時(shí)增加一個(gè)變量對(duì)象格郁,改變量對(duì)象會(huì)在代碼執(zhí)行后被移除腹殿。

try-catch 語句的catch塊

with 語句

這兩個(gè)語句都會(huì)在作用域鏈的前端添加一個(gè)變量對(duì)象。對(duì)With語句來說例书,會(huì)將指定的對(duì)象天劍到作用域鏈中锣尉。對(duì)Catch語句來說,會(huì)創(chuàng)建一個(gè)新的變量對(duì)象决采,其中包含的是被拋出的錯(cuò)誤對(duì)象的聲明自沧。

JS 中沒有塊級(jí)作用域

JavaScript 作用域不是以花括號(hào)包圍的塊級(jí)作用域,JS 中的變量作用域是有函數(shù)來決定的织狐。

em:

注意:在JS中可以初始化未聲明的變量暂幼。同時(shí)初始化未聲明的變量會(huì)將該變量添加全局變量中。

JS 函數(shù)作用域

JavaScript 的函數(shù)定義是可以嵌套的移迫,每一層是一個(gè)作用域旺嬉,變量搜索是從內(nèi)到外。

上述代碼不會(huì)輸出global厨埋,輸出undefined邪媳。這是JavaScript的一個(gè)特性,按照作用域搜索順序荡陷。在console.log函數(shù)訪問Scope變量時(shí)雨效,javaScript會(huì)先搜索函數(shù)f 的作用域,恰巧在f作用域里面搜索到scope變量废赞,所有上層作用域中定義的Scope就被屏蔽了徽龟。但執(zhí)行到console.log 語句時(shí),scope還沒被定義所以得到的就是undefined唉地。


JS 的作用域是靜態(tài)作用域

函數(shù)作用域的嵌套關(guān)系是定義時(shí)決定的据悔,而不是調(diào)用時(shí)決定的传透,又叫詞法作用域。這是因?yàn)樽饔糜虻那短钻P(guān)系可以在語法分析時(shí)確定极颓,而不必等到運(yùn)行時(shí)確定

輸出 top ?top 說明了作用域的嵌套關(guān)系不是在調(diào)用時(shí)確定的朱盐,而是在定義時(shí)確定的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市菠隆,隨后出現(xiàn)的幾起案子兵琳,更是在濱河造成了極大的恐慌,老刑警劉巖骇径,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躯肌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡破衔,警方通過查閱死者的電腦和手機(jī)羡榴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來运敢,“玉大人,你說我怎么就攤上這事忠售〈荩” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵稻扬,是天一觀的道長卦方。 經(jīng)常有香客問我,道長泰佳,這世上最難降的妖魔是什么盼砍? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮逝她,結(jié)果婚禮上浇坐,老公的妹妹穿的比我還像新娘。我一直安慰自己黔宛,他們只是感情好近刘,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著臀晃,像睡著了一般觉渴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上徽惋,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天案淋,我揣著相機(jī)與錄音,去河邊找鬼险绘。 笑死踢京,一個(gè)胖子當(dāng)著我的面吹牛誉碴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播漱挚,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼翔烁,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了旨涝?” 一聲冷哼從身側(cè)響起蹬屹,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎白华,沒想到半個(gè)月后慨默,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弧腥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年厦取,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片管搪。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡虾攻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出更鲁,到底是詐尸還是另有隱情霎箍,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布澡为,位于F島的核電站漂坏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏媒至。R本人自食惡果不足惜顶别,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拒啰。 院中可真熱鬧驯绎,春花似錦、人聲如沸图呢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛤织。三九已至赴叹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間指蚜,已是汗流浹背乞巧。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摊鸡,地道東北人绽媒。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓蚕冬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親是辕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子囤热,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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

  • 介紹 JavaScript中有一個(gè)被稱為作用域(Scope)的特性。雖然對(duì)于許多新手開發(fā)者來說获三,作用域的概念并不是...
    安_6dd1閱讀 958評(píng)論 0 8
  • 目錄 1.靜態(tài)作用域與動(dòng)態(tài)作用域 2.變量的作用域 3.JavaScript 中變量的作用域 4.JavaScri...
    一縷殤流化隱半邊冰霜閱讀 7,082評(píng)論 37 113
  • 作用域是變量與函數(shù)的可訪問范圍旁蔼,作用域控制著變量與函數(shù)的可見性和生命周期。變量的作用域有兩種:全局作用域和局部作用...
    lulu_c閱讀 539評(píng)論 0 2
  • 給兒子講畫冊(cè)故事《洋蔥頭》限佩,講到洋蔥頭挖通了到關(guān)押著老洋蔥頭監(jiān)獄的地道,老洋蔥頭要指著天空說點(diǎn)什么裸弦,來引開看守士兵...
    甲乙丙丁閱讀 173評(píng)論 0 0
  • 文學(xué)是對(duì)靈魂的創(chuàng)造 文學(xué)是精神的養(yǎng)分 在文學(xué)的世界里你能找到每一個(gè)更真實(shí)的你 或是你想追求的完善的每一個(gè)你 在文學(xué)...
    獅女柔心_Nicole陶閱讀 248評(píng)論 4 5