解析javascript 是由上到下執行的?

1、聲明優先函數

js 是由上到下一行一行執行的,並不徹底正確,考慮如下代碼:spa

a = 2;io

var a;console

console.log(a);編譯

輸入結果是什麼? 並非undefined,輸出結果是2function

==============變量

考慮下面這段代碼:異常

console.log(a);思考

var a = 2;co

這段代碼你可能認爲會拋出異常 ReferenceError ?然而輸出的結果是undefined

===============

js引擎有兩個步驟,編譯和運行,正確的思考是,包括變量和函數在內全部的聲明都會在任何代碼被執行首先被處理

因此第一個代碼段其實是以下的方式進行處理:

var a;

a = 2;

console.log(a);

第二個代碼段其實是以下流程:

var a;

console.log(a);

a = 2;

==================

函數聲明會被提高,可是函數表達式並不會被提高:

foo(); // TypeError異常

var foo = function(){

    //dosomething...

}

2、函數優先

函數聲明和變量聲明都會被提高,可是函數聲明會首先被提高,而後是變量聲明。以下代碼:

foo();

var foo;

function foo(){

    console.log(1)

}

foo = function(){

    console.log(2);

}

結果會輸出1而不是2,js引擎是以下理解這段代碼的:

function foo(){

    console.log(1);

}

foo();

foo = function(){

    console.log(2);

}

注意:var foo 儘管出如今function foo()...的聲明以前,可是他是重複的聲明,在這裏被忽略了,由於函數聲明在變量聲明以前

相關文章
相關標籤/搜索