更新時(shí)間:2023年07月18日10時(shí)46分 來(lái)源:傳智教育 瀏覽次數(shù):
JavaScript 代碼是由瀏覽器中的 JavaScript 解析器來(lái)執(zhí)行的。JavaScript 解析器在運(yùn)行 JavaScript 代碼的時(shí)候分為兩步:預(yù)解析和代碼執(zhí)行。
預(yù)解析:在當(dāng)前作用域下, JS 代碼執(zhí)行之前,瀏覽器會(huì)默認(rèn)把帶有 var 和 function 聲明的變量在內(nèi)存中進(jìn)行提前聲明或者定義。
代碼執(zhí)行: 從上到下執(zhí)行JS語(yǔ)句。
預(yù)解析只會(huì)發(fā)生在通過(guò) var 定義的變量和 function 上。學(xué)習(xí)預(yù)解析能夠讓我們知道為什么在變量聲明之前訪問(wèn)變量的值是 undefined,為什么在函數(shù)聲明之前就可以調(diào)用函數(shù)。
預(yù)解析也叫做變量、函數(shù)提升。變量提升變量的聲明會(huì)被提升到當(dāng)前作用域的最上面,變量的賦值不會(huì)提升。
console.log(num); // 結(jié)果是多少? var num = 10; // ?
函數(shù)提升: 函數(shù)的聲明會(huì)被提升到當(dāng)前作用域的最上面,但是不會(huì)調(diào)用函數(shù)。
fn(); function fn() { console.log('打印'); }
解決函數(shù)表達(dá)式聲明調(diào)用問(wèn)題,參考以下代碼。
fn(); var fn = function() { console.log('想不到吧'); }
北京校區(qū)