一.程序中的一段源代碼在執(zhí)行前都會(huì)編譯
為以下三個(gè)步驟;
1.分詞/詞法分析
就是把語(yǔ)句拆分成單個(gè)單個(gè)的詞法單元。[ var 桑包, a 南蓬,= , 2哑了, 赘方;] 判斷它們是否具有意義。
[' var ', ' a' ,' = ' , '2 ', ';']
2.解析/語(yǔ)法分析
將詞法單元(數(shù)組)轉(zhuǎn)換成由元素逐級(jí)嵌套的AST(程序語(yǔ)法結(jié)構(gòu)的樹)弱左。
3.代碼生成
將AST轉(zhuǎn)化成可執(zhí)行代碼(機(jī)器指令)窄陡。
二.理解作用域
1.引擎
js編譯以及執(zhí)行過程。
2.編譯器(一)
3.作用域
收集并維護(hù)標(biāo)識(shí)(變量)拆火,確定其訪問權(quán)限跳夭。
4.作用域嵌套
當(dāng)一個(gè)作用域嵌套在另一個(gè)塊或函數(shù)中,就產(chǎn)生了作用域嵌套们镜。
在當(dāng)前作用域無(wú)法找到某變量時(shí)币叹,向外層查找。
三.函數(shù)作用域
函數(shù)作用域是指屬于這個(gè)函數(shù)的全部變量 都可以在整個(gè)函數(shù)的范圍內(nèi)使用及復(fù)用模狭。
在函數(shù)外部調(diào)用颈抚。被調(diào)用函數(shù)一定為具名函數(shù),而用函數(shù)名調(diào)用函數(shù)這種方法就污染了作用域嚼鹉。使用IIFE函數(shù)解決了這個(gè)問題贩汉。在調(diào)用外部js時(shí)所得沙箱模式就是IIFE,不污染外部環(huán)境锚赤。
四.塊作用域
塊作用域的用處:變量的聲明應(yīng)該距離使用的地方越近越好匹舞。并最大限度的本地化。避免污染线脚。
1.let
let聲明的變量可以將變量綁定到所在的任意作用域中赐稽。({ .. }內(nèi)部)
使用let聲明的變量不會(huì)被提升叫榕。(如下代碼)
{
console.log(bar); // ReferenceError
let bar = 2; //此處不會(huì)被提升。
}
for循環(huán)中的let將i綁定到了每一個(gè)迭代中姊舵。
2.const
固定常量翠霍,不可被修改,否則報(bào)錯(cuò)蠢莺。
五.提升