什么是作用域

編譯原理

傳統(tǒng)編譯語言

  • 詞法分析:將由字符組成的字符串分解成(對編譯語言來說)有意義的代碼塊号杠,這些代碼塊被稱為詞法單元慕趴。
  • 解析/語法分析:將詞法單元流(數(shù)組)轉(zhuǎn)換成一個由元素逐級嵌套所組成的代表了程序語法結(jié)構(gòu)的樹酬土,即“抽象語法樹”(abstract syntax tree囚戚,AST)沼填。
  • 代碼生成:將AST轉(zhuǎn)換成可執(zhí)行代碼的過程被稱為代碼生成朋其。這個過程與語言倦始、目標平臺等息息相關(guān)斗遏。

相比只有三個步驟的語言的編譯器,javascript引擎要復(fù)雜的多鞋邑。例如诵次,在語法分析和代碼生成階段有特定的步驟來對運行性能進行優(yōu)化,包括對冗余元素進行優(yōu)化枚碗。簡單的說逾一,任何javascript代碼片段在執(zhí)行前都要進行編譯(通常就在執(zhí)行前)

理解作用域

  • 程序處理過程中的角色:
    1.引擎
    從頭到尾負責整個javascript程序的編譯和執(zhí)行過程
    2.編譯器
    負責語法分析及代碼生成等臟活累活
    3.作用域
    負責收集并維護由所有聲明的標識符(變量)組成的一系列查詢,并實施一套非常嚴格的規(guī)則肮雨,確定當前執(zhí)行的代碼對這些標識符的訪問權(quán)限遵堵。
    簡單的說:作用域是一套規(guī)則,用于確定在何處以及如何查找變量(標識符)
  • 變量的賦值操作
    var a=2;
    會執(zhí)行兩個動作怨规,首先編譯器會在當前作用域聲明一個變量(如果之前沒有聲明過)陌宿,然后運行時引擎會在作用域中查找該變量,如果能夠找到就會對他賦值:

1.編譯器在編譯過程的第二步中生成了代碼波丰,引擎執(zhí)行它時壳坪,會通過查找變量來判斷它是否以聲明過,查找的過程由作用域進行協(xié)助掰烟。

2.引擎有兩種查找類型:(1)如果查找的目的是對變量進行賦值弥虐,那么就會使用LHS查詢,(2) 如果目的是獲取變量的值媚赖,就會使用RHS查詢。這兩種查詢都會在當前執(zhí)行作用域中開始珠插,如果他們沒有找到所需的標識符惧磺,就會向上級作用域繼續(xù)查找目標標識符,最后抵達全局作用域捻撑,這時候無論找不找的到都將停止磨隘。

3.不成功的RHS引用會導(dǎo)致拋出ReferenceError異常:在所有嵌套的作用域中遍尋不到所需的變量缤底。不成功的LHS引用會導(dǎo)致自動隱式創(chuàng)建一個全局變量(非嚴格模式下),該變量使用LHS引用的目標作為標識符番捂,或者拋出ReferenceError異常(嚴格模式下)

4.如果RHS查詢找到了一個變量个唧,但你嘗試對這個變量的值進行不合理的操作,比如試圖對一個非函數(shù)類型的值進行函數(shù)調(diào)用设预,或者引用null或undefined類型的值中的屬性徙歼,那么引擎會拋出另外一種類型的異常,叫做TypeError鳖枕。ReferenceError同作用域判別的失敗相關(guān)魄梯,而TypeError則代表作用域判別成功了,但是對結(jié)果的操作是非法或不合理的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宾符,一起剝皮案震驚了整個濱河市酿秸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌魏烫,老刑警劉巖辣苏,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異哄褒,居然都是意外死亡稀蟋,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門读处,熙熙樓的掌柜王于貴愁眉苦臉地迎上來糊治,“玉大人,你說我怎么就攤上這事罚舱【迹” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵管闷,是天一觀的道長粥脚。 經(jīng)常有香客問我,道長包个,這世上最難降的妖魔是什么刷允? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮碧囊,結(jié)果婚禮上树灶,老公的妹妹穿的比我還像新娘。我一直安慰自己糯而,他們只是感情好天通,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著熄驼,像睡著了一般像寒。 火紅的嫁衣襯著肌膚如雪烘豹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天诺祸,我揣著相機與錄音携悯,去河邊找鬼。 笑死筷笨,一個胖子當著我的面吹牛憔鬼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奥秆,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼逊彭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了构订?” 一聲冷哼從身側(cè)響起侮叮,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎悼瘾,沒想到半個月后囊榜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡亥宿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年卸勺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烫扼。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡曙求,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出映企,到底是詐尸還是另有隱情悟狱,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布堰氓,位于F島的核電站挤渐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏双絮。R本人自食惡果不足惜浴麻,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望囤攀。 院中可真熱鬧软免,春花似錦、人聲如沸焚挠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至向抢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胚委,已是汗流浹背挟鸠。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留亩冬,地道東北人艘希。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像硅急,于是被迫代替她去往敵國和親覆享。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

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