前端知識學習----聲明提升

JS是解釋執行的腳本語言,在一段JS腳本執行之前,需要先解析代碼,解析的時候會先創建一個全局的執行上下文環境,先把代碼中即將執行的變量,函數聲明提取出來。(內部的函數還沒有執行,不會參與進來)變量先暫時賦值爲undefined,函數則先聲明好即可使用。
以上做完,然後開始正式執行程序。
舉個例子:

console.log(a);   //undefined
var a = 100;
fn('zhangsan');
function fn(name){
    age = 20;
    console.log(name,age); //zhangsan,20
    var age;
}
console.log(b); //b is not defined
b = 100;

其中a是undefined,b報錯。原因在於JS代碼在執行之前,要全局解析,發現var a,直到有a這個變量,並將其存入執行上下文,而b沒有用var關鍵字聲明,JS解析器不識別他,因此不會被存入執行上下文。所以在JS代碼執行的時候,a存在於執行上下文,只不過沒有被賦值,爲undefined;而b在執行上下文沒有找到,因此報錯。
另外函數在執行之前,也會創建一個執行上下文環境,跟全局執行上下文類似,不過函數執行上下文多出this,arguments和函數的參數。

總結一下:

會生成執行上下文的範圍:一段script標籤,JS文件,一個函數
全局執行上下文: 變量定義,函數聲明
函數執行上下文:變量定義,函數聲明,this,arguments,函數參數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章