引擎在讀取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,在引用的時候也使用這個值,知道在其面後進行賦值,在使用時候即為所贖...