Js預(yù)解析的相關(guān)隨筆

寫這篇文章之前,我看到了簡(jiǎn)書中的另一篇文章,鏈接如下:
前端基礎(chǔ)進(jìn)階(二):執(zhí)行上下文詳細(xì)圖解

作者所述的 “執(zhí)行上下文” 的概念在我看來實(shí)是復(fù)雜,不是說寫的不對(duì)或是表述有什么問題,只是偏向底層,并不適合理解,這樣的文章放在前端基礎(chǔ)進(jìn)階的第二篇,對(duì)于新手來說是否有些不太友好?

寫了一點(diǎn)隨筆,寥寥數(shù)語(yǔ),不堪成文。

其實(shí)總結(jié)起來就一句話,在執(zhí)行js代碼之前,瀏覽器會(huì)對(duì)js代碼進(jìn)行預(yù)解析。

規(guī)則如下:

  • 將變量聲明提前到所有代碼的最前面;
  • 將函數(shù)聲明提前到函數(shù)聲明之后,其他代碼之前;
function foo () { 
    console.log('function foo')
}
var foo = 20;
console.log(foo);   // 20

我們首先來看一下這段代碼經(jīng)過預(yù)解析之后會(huì)變成什么樣:

var foo
function foo () { 
    console.log('function foo')
}
foo = 20
console.log(foo)

此時(shí)再看打印結(jié)果,自然也就一目了然了
我們繼續(xù)往下看:


/* ----- 預(yù)解析之前 -----*/

console.log(foo);
function foo () { 
  console.log('function foo')
}
var foo = 20;

/* ----- 預(yù)解析之后 -----*/

var foo;                 //  變量聲明提至最前
function foo () {         //  函數(shù)聲明提到變量聲明之后,其他代碼之前
  console.log('function foo')
}
console.log(foo);        //  打印 foo
foo = 20

顯而易見的是,此時(shí)foo代表的是函數(shù),下一行的變量賦值還沒有進(jìn)行,所以打印內(nèi)容便為foo函數(shù)

關(guān)于預(yù)解析過程,歸根結(jié)底也就只是開頭的那兩句話,
愿我的分享可以給大家?guī)硇┰S的收獲

一切能用 Js 實(shí)現(xiàn)的,終將都會(huì)使用 Js 來實(shí)現(xiàn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容