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