1.1 編譯原理
編譯語(yǔ)言
分詞/詞法分析
解析/語(yǔ)法分析
代碼生成
對(duì)于Javascript來(lái)說(shuō),大部分情況發(fā)生在代碼前的幾微秒(甚至更短Tㄐ)的時(shí)間內(nèi)。在我們所要討論的作用域背后,Javascript引擎用盡了各種辦法(比如JIT橡淆,可以延遲編譯甚至重編譯)來(lái)保證性能最佳
1.2理解作用域
1.2.1 演員表
- 引擎
- 編譯器
- 作用域
1.2.2 對(duì)話
變量的賦值操作會(huì)執(zhí)行兩個(gè)動(dòng)作召噩,首先編譯器會(huì)在當(dāng)前作用域中聲明一個(gè)變量(如果之前沒(méi)有聲明過(guò)),然后在運(yùn)行時(shí)引擎會(huì)在作用域中查找該變量,如果能夠找到就會(huì)對(duì)它賦值
1.2.3 編譯器有話說(shuō)
賦值操作的目標(biāo)是誰(shuí)(LHS)
誰(shuí)賦值操作的源頭(RHS)
a = 2 是LHS引用
console.log(a); 是RHS引用
1.2.4 引擎和作用域的對(duì)話
1.2.5 小測(cè)驗(yàn)
檢驗(yàn)一下到目前的理解程度逸爵。 把自己當(dāng)作引擎具滴, 并同作用域進(jìn)行一次“ 對(duì)話” :
function foo(a) {
var b = a;
return a + b;
}
var c = foo( 2 );
-
找到其中所有的 LHS 查詢。( 這里有 3 處师倔! )
c = ..;构韵、 a = 2( 隱式變量分配)、 b = ..
-
找到其中所有的 RHS 查詢趋艘。( 這里有 4 處疲恢! )
foo(2..、 = a;瓷胧、 a ..显拳、 .. b