欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析JavaScript預(yù)編譯和暗示全局變量

 更新時(shí)間:2020年09月03日 16:17:52   作者:葉遮沉陽(yáng)  
這篇文章主要介紹了JavaScript預(yù)編譯和暗示全局變量的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)JavaScript,感興趣的朋友可以了解下

1. 暗示全局變量

未聲明的變量稱為暗示全局變量。

var a = 1; //函數(shù)體外聲明的變量稱為全局變量
b = 2; // 無(wú)論函數(shù)體外或函數(shù)體內(nèi)未聲明的變量都稱為暗示全局變量
function fn() {
 var c = 3; //函數(shù)體內(nèi)聲明的變量稱為局部變量
 d = 4; // 暗示全局變量
}
fn(); // 若不執(zhí)行函數(shù),則不會(huì)進(jìn)行函數(shù)預(yù)編譯,d 就不會(huì)提升為全局變量
console.log(c); // error: c is not defined
console.log(d); // 4

2. JavaScript執(zhí)行過(guò)程

1. 語(yǔ)法分析,若存在低級(jí)語(yǔ)法錯(cuò)誤,則不編譯執(zhí)行;
2. 預(yù)編譯,包括變量聲明提前和函數(shù)聲明提前;
3. 解釋執(zhí)行,解釋一行,執(zhí)行一行。

3. 預(yù)編譯

預(yù)編譯可分為全局預(yù)編譯和函數(shù)預(yù)編譯。

預(yù)編譯可分為全局預(yù)編譯和函數(shù)預(yù)編譯。

1. 在js腳本加載之后,會(huì)先通篇檢查是否存在低級(jí)錯(cuò)誤;
2. 在語(yǔ)法檢測(cè)完之后,便進(jìn)行全局預(yù)編譯;
3. 在全局預(yù)編譯之后,就解釋一行,執(zhí)行一行;
4. 當(dāng)執(zhí)行到函數(shù)調(diào)用那一行,會(huì)先進(jìn)行函數(shù)預(yù)編譯,再往下執(zhí)行。

全局預(yù)編譯:

1. 創(chuàng)建全局對(duì)象GO(window對(duì)象);
2. 變量聲明提前,將所有變量的聲明放到最前面,作為GO對(duì)象的屬性,
并賦值undefined,若存在變量名相同,只聲明一個(gè);
3. 函數(shù)聲明提前,將函數(shù)聲明也放到最前面,作為GO對(duì)象的屬性,
若函數(shù)名與變量名相同,變量名會(huì)被函數(shù)名覆蓋,值是函數(shù)體。
這就是函數(shù)定義放到函數(shù)調(diào)用之前或之后都可以的原因。

函數(shù)預(yù)編譯:

1. 在函數(shù)執(zhí)行前的一瞬間,函數(shù)預(yù)編譯閃亮登場(chǎng);
2. 先創(chuàng)建一個(gè)AO對(duì)象(Active Object);
3. 將形參和變量聲明提前,賦值undefined,作為AO的屬性;
4. 將實(shí)參賦值給形參;
5. 函數(shù)聲明提前,值為函數(shù)體,作為AO的屬性。

栗子:

var a = 1;
function b(c){
 console.log(c);
 var c = 2;
 console.log(c);
 function c() {}
 var d = 3;
 function e() {}
}
b(4);

先分析全局預(yù)編譯,

  • 創(chuàng)建GO對(duì)象,GO = {};
  • 變量聲明提前
// 偽代碼
GO = { 
 a = undefined
}
  • 函數(shù)聲明提前
// 偽代碼
GO = { 
 a = undefined
 b = f b(c) { console.log(c); ... }
}

再分析函數(shù)預(yù)編譯,

  • 創(chuàng)建AO對(duì)象,AO = {};
  • 形參和變量聲明提前;

// 偽代碼
AO = { 
c = undefined // 與變量名相同,只聲明一個(gè)
d = undefined
}
  • 將實(shí)參賦值給形參;
// 偽代碼
AO = { 
c = 4 // b(4),傳入的實(shí)參是4
d = undefined
}

  • 函數(shù)聲明提前

// 偽代碼
AO = { 
c = f c() {} // 函數(shù)名會(huì)覆蓋變量名
d = undefined
e = f e() {}
}

所以第一次打印變量c的時(shí)候,是輸出函數(shù)體,而不是實(shí)參4。

以上就是淺析JavaScript預(yù)編譯和暗示全局變量的詳細(xì)內(nèi)容,更多關(guān)于JavaScript預(yù)編譯和暗示全局變量的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論