1.作用域入門

從最簡單的例子開始

var a = 1;

想要執(zhí)行代碼叼耙,必須要先要進行編譯授滓。JavaScript的編譯過程很短,就在執(zhí)行代碼之前借嗽。

編譯的主要三個過程:

1.分詞/詞法分析:
把字符組成的字符串分解成var、a转培、=恶导、1、浸须;惨寿、五個詞法單元邦泄。

2.解析/語法分析:
把詞法單元流[數(shù)組],解析成由元素逐級嵌套而成的代表程序語法結構的樹(AST)裂垦。

3.代碼生成:
把AST轉換為可執(zhí)行的代碼的過程稱為代碼生成虎韵。

更易理解的說

var a = 1;這樣一個簡單地程序,分為兩個聲明缸废,一段由編譯器在編譯時處理包蓝,另外一個由引擎在運行時處理。

  • 第一步首先分解成詞法單元企量。
  • 第二步解析成樹結構
  • 第三步
 1. 遇見 var a ,編譯器會詢問作用域测萎,是否已經有一個該名稱的變量
存在同一個作用域集合中,如果有届巩,就跳過該聲明硅瞧,繼續(xù)編譯。
如果沒有恕汇,就會要求作用域在當前的作用域集合中聲明一個新的變量
名字叫 a
 2.接下來編譯器會生成運行時候的代碼腕唧,這些代碼被用來處理a = 2這個賦值操作。
引擎在運行的時候會查詢作用域內是否有叫做a的變量瘾英,
如果之前沒有聲明過枣接,就會去上一層作用域去查找。
最終找到的話缺谴,就為其執(zhí)行賦值操作但惶,
沒有找到的話,引擎就會拋出一個異常湿蛔。

更進一步的理解

關于變量的操作都會涉及LHS查詢和RHS查詢
當變量出現(xiàn)在賦值操作的左側時進行LHS查詢(不準確的理解)
a = 2;
我們不關心a所代表原來的值是什么膀曾,
我們只需要找到這個變量,賦值為2
當變量出現(xiàn)在賦值操作的右側的時候進行RHS查詢
console.log(a);
這里對a進行的是RHS查詢阳啥,因為我們沒有對它賦值添谊,而是取得它所代表的值。
function foo (){}察迟;//函數(shù)聲明不能理解成LHS查詢
var foo = function(){};//函數(shù)表達式可以斩狱。

異常

1.執(zhí)行RHS查詢的時候,如果在所有的嵌套的作用域都找不到所需要的變量
--報錯:ReferenceError
2.執(zhí)行LHS查詢的時候卷拘,如果找到了全局作用域下喊废,還是沒有找到,
就會在全局下創(chuàng)建這個變量栗弟,返回給引擎(非嚴格模式下)污筷。
嚴格模式下:
--報錯:ReferenceError
3.如果把RHS查詢的變量進行非法操作,比如把一個非函數(shù)類型的值
進行函數(shù)操作,那么就會報錯:
-- TypeError
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末瓣蛀,一起剝皮案震驚了整個濱河市陆蟆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惋增,老刑警劉巖叠殷,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異诈皿,居然都是意外死亡林束,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門稽亏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來壶冒,“玉大人,你說我怎么就攤上這事截歉∨痔冢” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵瘪松,是天一觀的道長咸作。 經常有香客問我,道長宵睦,這世上最難降的妖魔是什么记罚? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮状飞,結果婚禮上毫胜,老公的妹妹穿的比我還像新娘。我一直安慰自己诬辈,他們只是感情好,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布荐吉。 她就那樣靜靜地躺著焙糟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪样屠。 梳的紋絲不亂的頭發(fā)上穿撮,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機與錄音痪欲,去河邊找鬼悦穿。 笑死,一個胖子當著我的面吹牛业踢,可吹牛的內容都是我干的栗柒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼知举,長吁一口氣:“原來是場噩夢啊……” “哼瞬沦!你這毒婦竟也來了太伊?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤逛钻,失蹤者是張志新(化名)和其女友劉穎僚焦,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體曙痘,經...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡芳悲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了边坤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片名扛。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖惩嘉,靈堂內的尸體忽然破棺而出罢洲,到底是詐尸還是另有隱情,我是刑警寧澤文黎,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布惹苗,位于F島的核電站,受9級特大地震影響耸峭,放射性物質發(fā)生泄漏桩蓉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一劳闹、第九天 我趴在偏房一處隱蔽的房頂上張望院究。 院中可真熱鬧,春花似錦本涕、人聲如沸业汰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽样漆。三九已至,卻和暖如春晦闰,著一層夾襖步出監(jiān)牢的瞬間放祟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工呻右, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留跪妥,地道東北人。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓声滥,卻偏偏與公主長得像眉撵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內容