我只是乙個初學web的小白,寫下這篇部落格也只是為了加深自己的理解,如有錯誤希望各位能不吝賜教。
首先說明一下js執行的兩個階段(js引擎)
1.預編譯階段
2.執行階段
變數和函式提公升就發生在預編譯階段
變數提公升就是在函式內,將區域性變數的宣告提到最上方,但是賦值依舊在原來的位置,如下
// console.log(n);
// var n = 10;
// 變數提公升後的樣式
// var n;
// console.log(n);
// n = 10;
這種提公升後的樣式並不會出現在**中,也就是js會在暗中將**轉換成這種格式,類似於隱式轉換。這也是為什麼區域性變數的宣告寫在最後但函式依然可用的原因。
// 變數提公升經典面試題
// console.log(v1); // undefined
// var v1 = 100;
// function foo()
// foo();
// console.log(v1); // 100
函式提公升與變數提公升類似,是將函式提公升到**的最上端
function
add(
)add()
;add
=function()
// 列印結果是666
但要注意一點,當函式提公升和變數提公升並存時,函式提公升為大。如**所示
console.
log(a)
;functiona(
)var a =10;
console.
log(a);a
();// 解析
functiona(
)var a;
// 此時已經失效
console.
log(a)
// 列印結果為function a()
a =10;
console.
log(a)
// 列印結果為 10a(
)// 會報錯,因為a此時已經是10而非函式名了
變數與函式提公升是由js自行完成的,不需要額外注意,但最好還是按照標準格式敲寫**,以免發生bug。此外,這也是面試時常考的問題 JS 變數提公升 函式名提公升 變數和函式結合的提公升
一 變數的提公升 1 使用var 關鍵字宣告的變數會提公升到 的頭部 變數提公升 例子 console.log num undefined var num 100 console.log num 100 var x console.log x undefined 2 不使用var關鍵字宣告的變數是全...
深入理解JS中的函式宣告提公升和變數宣告提公升
簡介 本文先從函式的宣告方式說起,介紹不同函式的宣告方式在函式宣告提公升上的不同。然後根據具體的例子比較變數宣告提公升和函式宣告提公升的不同。第一部分 函式的宣告方式 函式宣告有三種方式 函式宣告,函式表示式 又稱函式字面量宣告 函式物件的宣告 使用率很低 方式一 函式宣告 function 函式名...
JS函式提公升和變數提公升
js引擎在執行整個js 的過程中,分為倆步。第一步是讀取和解析js 第二部是執行。在引擎解析js 的時候,當解析器遇見變數宣告 var 變數名 和函式宣告 function 函式名 的時候,會將這些宣告提到各自作用域的最前面。在es6之前,js是沒有塊級作用域的。只有2種作用域 注 在其他語言中,被...