js中注册标识符流程
注冊分為三個(gè)階段:分別是注冊階段,函數(shù)處理階段,變量處理階段;這三個(gè)階段有先后順序的。(注:這三個(gè)階段的名字沒有權(quán)威性,是作者為了方便記憶自己起的名字)
注冊階段的特征
1.此時(shí)不會(huì)運(yùn)行代碼
2.檢查低級的語法錯(cuò)誤
3.注冊在當(dāng)前詞法環(huán)境中所聲明的變量和函數(shù)
4.一旦創(chuàng)建了新的詞法環(huán)境,就會(huì)執(zhí)行這一階段
函數(shù)處理階段
如果是函數(shù)環(huán)境(也就是說局部環(huán)境):創(chuàng)建形參及函數(shù)參數(shù)的默認(rèn)值;然后實(shí)參形參相統(tǒng)一。 如果全局環(huán)境,就跳過這這一步
接下來是全局環(huán)境和函數(shù)環(huán)境都經(jīng)歷的:將函數(shù)聲明進(jìn)行掃描并綁定到當(dāng)前環(huán)境與函數(shù)名相同的標(biāo)識符上。若該標(biāo)識符已經(jīng)存在,那么該標(biāo)識符的值將被重寫。(注意此時(shí)不會(huì)理會(huì)函數(shù)表達(dá)式和箭頭函數(shù))
對變量進(jìn)行處理
若在全局作用域中或者函數(shù)作用域中。掃描三種變量 var 、let、const定義的變量。
若是塊級作用域:掃描兩種變量 let、const定義的變量。對于所查找到的變量,若該標(biāo)識符不存在,進(jìn)行注冊并將其初始化為undefined。若該標(biāo)識符已經(jīng)存在,將保留其值。
?
轉(zhuǎn)載于:https://www.cnblogs.com/weikemudan/p/11152041.html
總結(jié)
以上是生活随笔為你收集整理的js中注册标识符流程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做梦梦到蛇吃人是什么征兆
- 下一篇: 多线程1