1. 棧內(nèi)存和堆內(nèi)存
- 棧內(nèi)存
連續(xù)的存儲(chǔ)空間徙菠,類似數(shù)據(jù)結(jié)構(gòu)中的棧,用于存放數(shù)值郁岩,字符婿奔,內(nèi)存地址等小數(shù)據(jù)缺狠。
基本類型數(shù)據(jù)的值被保存在棧內(nèi)存中。
Number,String,Boolean,Null,Undefined
- 堆內(nèi)存
散列的存儲(chǔ)空間萍摊,類似于數(shù)據(jù)結(jié)構(gòu)中的鏈表挤茄,存放動(dòng)態(tài)變化的大數(shù)據(jù)。
引用類型的值被保存在堆內(nèi)存中冰木,棧內(nèi)存中僅保存堆內(nèi)存的地址穷劈。
Object,Array,Function
2. 變量作用域
- 全局變量
- 局部變量
當(dāng)函數(shù)在執(zhí)行時(shí),會(huì)創(chuàng)建一個(gè)封閉的執(zhí)行期上下文環(huán)境踊沸,函數(shù)內(nèi)部聲明的變量僅可在函數(shù)內(nèi)部使用歇终,外部無法訪問,而全局變量則在任何地方都可以使用
3. JS預(yù)編譯
- 語法分析
通篇掃描js文件雕沿,檢查是否有低級(jí)語法錯(cuò)誤
- 預(yù)編譯4部曲
未進(jìn)入執(zhí)行階段练湿,變量對(duì)象VO(variable object)都不能訪問,進(jìn)入執(zhí)行階段后审轮,變量對(duì)象VO轉(zhuǎn)變?yōu)榱嘶顒?dòng)對(duì)象AO(active object)肥哎,里面的屬性都能被訪問了,然后開始執(zhí)行階段的操作疾渣。
Index | Content |
---|---|
第一步 | 創(chuàng)建AO對(duì)象(執(zhí)行期上下文對(duì)象篡诽,全局為GO) |
第二步 | 將形參和變量聲明作為AO對(duì)象的屬性名,值為Undefined |
第三步 | 將實(shí)參值傳遞給形參榴捡,即賦值給AO對(duì)象對(duì)應(yīng)屬性名 |
第四步 | 將函數(shù)聲明為AO對(duì)象的方法名杈女,值為函數(shù)體 |
- 解釋執(zhí)行:解釋一行,執(zhí)行一行吊圾。
function test(a){
var b=1; function c(){}
}
test(2);
// 函數(shù)預(yù)編譯四部曲(函數(shù)執(zhí)行前一刻,不執(zhí)行不會(huì)預(yù)編譯)项乒,全局預(yù)編譯同理
1---testAO
{}
2---testAO
{a:undefined,b:undefined}
3---testAO
{a:2,b:undefined}
4---testAO
{a:2,b:1,c:function(){}}