變量提升
函數(shù)提升(定義式定義蜒犯、表達(dá)式定義)
JavaScript 的可執(zhí)行代碼(executable code)的類型
- 全局代碼
- 函數(shù)代碼
- eval代碼
當(dāng)執(zhí)行到一個(gè)函數(shù)的時(shí)候,就會(huì)進(jìn)行準(zhǔn)備工作,這里的“準(zhǔn)備工作”,讓我們用個(gè)更專業(yè)一點(diǎn)的說(shuō)法,就叫做"執(zhí)行上下文(execution context)
JavaScript 引擎會(huì)創(chuàng)建了執(zhí)行上下文棧(Execution context stack莉掂,ECS)來(lái)管理執(zhí)行上下文
執(zhí)行上下文的類型分為
- 全局上下文
- 函數(shù)上下文
當(dāng) JavaScript 開(kāi)始要解釋執(zhí)行代碼的時(shí)候,最先遇到的就是全局代碼千扔,所以初始化的時(shí)候首先就會(huì)向執(zhí)行上下文棧壓入一個(gè)全局執(zhí)行上下文巫湘,我們用 globalContext 表示它,并且只有當(dāng)整個(gè)應(yīng)用程序結(jié)束的時(shí)候昏鹃,ECStack 才會(huì)被清空尚氛,所以程序結(jié)束之前, ECStack 最底部永遠(yuǎn)有個(gè) globalContex