1. 程式人生 > >談js的變數宣告和函式宣告提升

談js的變數宣告和函式宣告提升

首先我們需要知道JS解析的兩個階段:預處理、執行期,本次來談談預處理階段。

預處理階段:JS會對程式碼中所有用var宣告的變數和函式宣告進行處理,將其提前。

注:其中變數也只是進行了宣告並未進行初始化以及賦值。

變數:

來個簡單的例子:

console.log(a);
var a = 1;

!!會顯示undefined。

實際上,瀏覽器的解析過程如下:

var a;
console.log(a); 
a = 1;

變數宣告提前了,但賦值語句並未改變位置,這就叫變數的提升

 

函式

JS中的函式定義分為兩種:函式宣告與函式表示式

來個例子:

fn();
var fn = function aa() { //函式表示式
    console.log(a);
    var a = 1;
}

!!會直接報錯。

再來一個對比一下:

fn();	
function fn () {//函式宣告
    console.log(1);
}

!!結果為1。

結論:函式宣告可以提升,函式表示式的宣告不能提升。