//變量提升 預(yù)處理
js引擎在代碼正式執(zhí)行之前會做一個預(yù)處理的工作:
1.收集變量
2.收集函數(shù)
依據(jù):
var 將var后邊的變量定義但是不賦值 var username = undefined;
function(){} 提前定義該函數(shù)
console.log(username); //undefined
var username = 'kobe';
console.log(username); //kobe
fun();//正常執(zhí)行函數(shù)
function fun(){
console.log('fun()');
}
//執(zhí)行上下文 執(zhí)行上下文對象
執(zhí)行上下文(execute context)EC
理解:代碼執(zhí)行的環(huán)境
時機:代碼正式執(zhí)行之前會進(jìn)入到執(zhí)行環(huán)境
作用域是代碼定義的時候產(chǎn)生的狂男。
執(zhí)行上下文是代碼馬上要執(zhí)行時產(chǎn)生的党巾。
工作:
1.創(chuàng)建變量對象:
1)變量
2)函數(shù)及函數(shù)的參數(shù)
3)全局:window
4) 局部:抽象的但是確實存在
2.確認(rèn)this的指向
1)全局:this--->window
2) 局部:this--->調(diào)用其的對象
3.創(chuàng)建作用域鏈
父級作用域鏈 + 當(dāng)前的變量對象
4.擴展
ECObj={
變量對象:{變量求厕,函數(shù),函數(shù)的形參}
scopeChain: 父級作用域鏈 + 當(dāng)前的變量對象
this:{ window || 調(diào)用其的對象 }
}
執(zhí)行上下文對象:this