最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析JavaScript預編譯和暗示全局變量

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

1. 暗示全局變量

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

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

2. JavaScript執(zhí)行過程

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

3. 預編譯

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

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

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

全局預編譯:

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

函數預編譯:

1. 在函數執(zhí)行前的一瞬間,函數預編譯閃亮登場;
2. 先創(chuàng)建一個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);

先分析全局預編譯,

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

再分析函數預編譯,

  • 創(chuàng)建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預編譯和暗示全局變量的詳細內容,更多關于JavaScript預編譯和暗示全局變量的資料請關注腳本之家其它相關文章!

相關文章

  • 深入解析微信小程序開發(fā)中遇到的幾個小問題

    深入解析微信小程序開發(fā)中遇到的幾個小問題

    這篇文章主要介紹了微信小程序開發(fā)中遇到的幾個小問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • js open() 與showModalDialog()方法使用介紹

    js open() 與showModalDialog()方法使用介紹

    項目開發(fā)中經常要用到js open() 與showModalDialog()方法,下面有個不錯的示例,喜歡的朋友可以研究下
    2013-09-09
  • AI小程序之語音聽寫來了,十分鐘掌握百度大腦語音聽寫全攻略

    AI小程序之語音聽寫來了,十分鐘掌握百度大腦語音聽寫全攻略

    語音識別極速版能將60秒以內的完整音頻文件識別為文字,本文主要介紹采用百度語音識別,實現(xiàn)小程序的聽寫功能,感興趣的同學可以來了解一下
    2020-03-03
  • JS實現(xiàn)數組扁平化的方法總結

    JS實現(xiàn)數組扁平化的方法總結

    數組扁平化相信不少朋友在一些面試中被問到過,這在我們日常編程中也是一個常規(guī)操作,它需要我們將一個多維數組轉化成一個一維數組,所以,借著這篇文章,我們今天就一起來匯總一下幾種數組扁平化的方式,需要的朋友可以參考下
    2024-02-02
  • 快速查找數組中的某個元素并返回下標示例

    快速查找數組中的某個元素并返回下標示例

    最近在寫jquery的combobox插件時遇到效率問題,再加上jquery選擇器的類帥選,導致效率很慢,采用以下方式二,可以輕松解決此問題
    2013-09-09
  • JS如何實現(xiàn)Base64編碼和解碼(及中文亂碼問題)

    JS如何實現(xiàn)Base64編碼和解碼(及中文亂碼問題)

    這篇文章主要給大家介紹了關于JS如何實現(xiàn)Base64編碼和解碼及中文亂碼問題的相關資料,Base64編碼是一種常用的將二進制數據轉換為文本數據的方式,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • 基于Next.js實現(xiàn)在線Excel的詳細代碼

    基于Next.js實現(xiàn)在線Excel的詳細代碼

    Next.js是一款React 開發(fā)框架,它可以幫助我們構建 React 應用程序。作為一個輕量級React服務端渲染應用框架,這篇文章主要介紹了基于?Next.js實現(xiàn)在線Excel,需要的朋友可以參考下
    2022-08-08
  • JavaScript+CSS實現(xiàn)唯美蝴蝶動畫

    JavaScript+CSS實現(xiàn)唯美蝴蝶動畫

    這篇文章主要介紹了JavaScript+CSS實現(xiàn)唯美蝴蝶動畫,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • 對于防止按鈕重復點擊的嘗試詳解

    對于防止按鈕重復點擊的嘗試詳解

    這篇文章主要介紹了對于防止按鈕重復點擊的嘗試,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • javascript實現(xiàn)圖片延遲加載方法匯總(三種方法)

    javascript實現(xiàn)圖片延遲加載方法匯總(三種方法)

    看到一些大型網站,頁面如果有很多圖片的時候,當你滾動到相應的行時,當前行的圖片才即時加載的,這樣子的話頁面在打開只加可視區(qū)域的圖片,而其它隱藏的圖片則不加載,一定程序上加快了頁面加載的速度,跟著小編一起學習javascript實現(xiàn)圖片延遲加載吧
    2015-08-08

最新評論

建阳市| 依安县| 吉隆县| 北京市| 和林格尔县| 磐石市| 遂平县| 吴旗县| 乌恰县| 资兴市| 邳州市| 响水县| 吉水县| 班玛县| 新昌县| 伊吾县| 诏安县| 中山市| 麻阳| 旅游| 鹤岗市| 南汇区| 利辛县| 盐池县| 抚宁县| 卓尼县| 兰州市| 白朗县| 台州市| 同心县| 建宁县| 林甸县| 郓城县| 定陶县| 云龙县| 弥渡县| 梨树县| 门源| 丰原市| 老河口市| 乐清市|