1 回答

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超8個(gè)贊
這真是個(gè)刁鉆的問題,講真這個(gè)很難講清到底誰(shuí)會(huì)先聲明,個(gè)人理解js的變量和函數(shù)聲明分成三個(gè)階段:申明,初始化,賦值。申明表示代碼解析的時(shí)候表明我現(xiàn)在這個(gè)作用域里有這個(gè)變量了,這個(gè)過程在es5里表現(xiàn)不明顯,但是es6里的let變量的表現(xiàn)就表明。初始化就是對(duì)變量和函數(shù)附上初始值,最后就是賦值將用戶的值附給對(duì)應(yīng)的變量和函數(shù)。正常我們說的聲明提前是對(duì)于var變量指的是 申明+初始化(let不一樣,他有臨時(shí)性死區(qū)其實(shí)際上應(yīng)該也算有提前,申明這個(gè)過程提前了),而函數(shù)的聲明提前指的是 申明+初始化+賦值,最重要的是解析器是將當(dāng)前作用域內(nèi)聲明的所有變量和函數(shù)都會(huì)放到作用域的開始處,所以誰(shuí)先誰(shuí)后不重要,可能是先變量后函數(shù),也可能是誰(shuí)在前誰(shuí)先來不按種類分,具體的可能就得看解析器到底是怎么做的了。
添加回答
舉報(bào)