javascript的預編譯階段

2021-09-07 19:18:15 字數 848 閱讀 5380

1.變數與函式

在js中宣告乙個變數有let const var三種方式,函式有宣告函式和函式表示式兩種。

2.預編譯階段做的事情

在預編譯階段,所有的var宣告的變數會被初始化為undefined,所有的宣告函式會用它的定義進行初始化,

而const let宣告的變數則不會在預編譯階段執行初始化,函式表示式也屬於變數的一種,因此如果使用var進行宣告,則也會被初始化為undefined。如果在賦值之前呼叫函式表示式,則會報乙個語法錯誤 uncaught typeerror: say is not a function,因為此時這個變數的值還是undefined。如果使用const 或 let宣告乙個函式表示式,則這個函式表示式不會在預編譯階段被初始化,在函式表示式被賦值之前呼叫它同樣會報乙個uncaught typeerror: say is not a function錯誤。

以下第一段**使用var宣告乙個函式表示式,在被賦值前,因為已經在預編譯階段進行了初始化,所以它的值為undefined;

第二段**使用const進行宣告,因為預編譯階段沒有對它進行,所以這個變數還不存在

console.log(say);

var say=function(){};

vm176:1 undefined

console.log(say);

const say=function(){};

vm199:1 uncaught referenceerror: say1 is not defined

3.預編譯的時間

在全域性作用域的所有**在**進入執行時就進行預編譯,在函式作用域內的**在函式被呼叫時進行預編譯。

JavaScript預編譯(函式)

知識點預習 1 js檔案的執行三部曲 語法分析 預編譯 解釋執行。2 變數未經宣告就使用,系統會報錯。3 var aa 夫 子 變數的宣告和賦值,aa為變數名,夫 子 是變數值。var aa是變數的宣告,aa 夫 子 是變數賦值。4 函式宣告 function demo 函式表示式 var demo...

javascript基礎 預編譯 this指向

預編譯發生在函式執行前一刻,可以拆分成一下幾步 1 生成activation object 即ao物件 執行期上下文 2 查詢形參和變數,並將其作為ao物件的屬性,值為undefined 3 將實參的值賦給形參 4 在函式體內查詢函式宣告,並將值賦予函式體 看看下面的例子 function fn a...

javaScript的預編譯問題總結

預編譯過程發生在函式執行前一刻。因為預編譯過程,因而產生的變數宣告提公升,和 函式宣告整體提公升 函式內部預編譯 2.全域性預編譯 例項 function fn a console.log a 123 var b function console.log b function function d ...