乙個例子,變數提公升和函式提公升就是這麼簡單!

2021-09-05 12:25:21 字數 1054 閱讀 4844

引擎在讀取js**的過程中,分為兩步。第乙個步驟是整個js**的解析讀取,第二個步驟是執行。

在js**執行之前,瀏覽器的解析器在遇到 var 變數名 和function 整個函式 提公升到當前作用域的最前面。

1.變數提公升只會提公升變數名的宣告,而不會提公升變數的賦值初始化。

2.函式提公升的優先順序大於變數提公升的優先順序,即函式提公升在變數提公升之上。

記住這兩句話,就可以從容不迫的擼**了!

console.log(a);  

var a=1;

console.log(a);

function a()

console.log(a);

var a=3;

console.log(a);

function a()

a();

console.log(a);

你知道執行結果嗎?

其實,實際的執行順序為:

function a()	//第一步預解析:將 var a提公升		但因為變數名與函式名相同,故function a()提公升時將覆蓋var a,又因為存在兩個相同名稱							的function函式,後寫的將覆蓋先寫的,所以最後提公升的只有function a()

console.log(a); //因為函式提公升,所以列印的a為函式整體

a=1; //將1賦值給函式a,此時的a為乙個變數,不再是函式

console.log(a); //故列印的為a賦的值

console.log(a);

a=3; //將a重新賦值3

console.log(a); //故列印結果為3

a(); //此時的a為乙個變數,不再是乙個函式,所以報錯,js中一旦出現報錯,後面的語句將不再執行,所以最後乙個console.log不進行列印。

console.log(a);

變數提公升和函式提公升

1.變數宣告提公升 通過var 定義 宣告 的變數,在定義語句之前就可以訪問到。值 undefined console.log a undefined var a 23 console.log a 23上面 等價於 var a 預編譯,將變數宣告提公升至當前作用域的頂端,初始值為undefined ...

變數提公升和函式提公升

首先js引擎在讀取js 時會進行兩個步驟,第乙個步驟是解釋,第二個步驟是執行。所謂解釋就是會先通篇掃瞄所有的js 然後把所有宣告提公升到頂端,第二步是執行,執行就是操作一類的。例子1 console.log a 輸出結果 undefined var a 10 script 以上 輸出 undefin...

javascript變數提公升和函式提公升

variable hoisting變數提公升是js比較有特點的地方,它允許你先使用變數,在其後面再進行變數宣告,不會丟擲 uncaught referenceerror異常。雖然變數被提公升到前面,但是它的預設值則是undefind,在引用的時候也使用這個值,知道在其面後進行賦值,在使用時候即為所贖...