中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript中暗示全局變量和預編譯的區別

發布時間:2020-11-05 15:44:13 來源:億速云 閱讀:182 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關JavaScript中暗示全局變量和預編譯的區別,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

1. 暗示全局變量

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

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

2. JavaScript執行過程

1. 語法分析,若存在低級語法錯誤,則不編譯執行;
2. 預編譯,包括變量聲明提前和函數聲明提前;
3. 解釋執行,解釋一行,執行一行。

3. 預編譯

預編譯可分為全局預編譯和函數預編譯。

預編譯可分為全局預編譯和函數預編譯。

1. 在js腳本加載之后,會先通篇檢查是否存在低級錯誤;
2. 在語法檢測完之后,便進行全局預編譯;
3. 在全局預編譯之后,就解釋一行,執行一行;
4. 當執行到函數調用那一行,會先進行函數預編譯,再往下執行。

全局預編譯:

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

函數預編譯:

1. 在函數執行前的一瞬間,函數預編譯閃亮登場;
2. 先創建一個AO對象(Active Object);
3. 將形參和變量聲明提前,賦值undefined,作為AO的屬性;
4. 將實參賦值給形參;
5. 函數聲明提前,值為函數體,作為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);

先分析全局預編譯,

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

再分析函數預編譯,

  • 創建AO對象,AO = {};
  • 形參和變量聲明提前
// 偽代碼
AO = { 
c = undefined // 與變量名相同,只聲明一個
d = undefined
}
  • 將實參賦值給形參;
     
// 偽代碼
AO = { 
c = 4 // b(4),傳入的實參是4
d = undefined
}
  • 函數聲明提
// 偽代碼
AO = { 
c = f c() {} // 函數名會覆蓋變量名
d = undefined
e = f e() {}
}

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

看完上述內容,你們對JavaScript中暗示全局變量和預編譯的區別有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

云安县| 蒙自县| 黄骅市| 深圳市| 孝昌县| 宿松县| 泽普县| 四会市| 新竹县| 星子县| 广安市| 丹东市| 平果县| 唐山市| 肇州县| 平江县| 紫阳县| 新乐市| 乌拉特前旗| 新密市| 开远市| 团风县| 金山区| 通许县| 阳曲县| 彩票| 弥勒县| 遂宁市| 耒阳市| 诸暨市| 岫岩| 犍为县| 涿鹿县| 蓝山县| 游戏| 昭平县| 苏尼特左旗| 达尔| 峡江县| 彩票| 临漳县|