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

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

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

1. 暗示全局變量

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

var a = 1; //函數(shù)體外聲明的變量稱為全局變量
b = 2; // 無論函數(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í)行過程

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

3. 預(yù)編譯

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

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

1. 在js腳本加載之后,會(huì)先通篇檢查是否存在低級(jí)錯(cuò)誤;
2. 在語法檢測(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)文章

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

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

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

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

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

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

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

    JS實(shí)現(xiàn)數(shù)組扁平化的方法總結(jié)

    數(shù)組扁平化相信不少朋友在一些面試中被問到過,這在我們?nèi)粘>幊讨幸彩且粋€(gè)常規(guī)操作,它需要我們將一個(gè)多維數(shù)組轉(zhuǎn)化成一個(gè)一維數(shù)組,所以,借著這篇文章,我們今天就一起來匯總一下幾種數(shù)組扁平化的方式,需要的朋友可以參考下
    2024-02-02
  • 快速查找數(shù)組中的某個(gè)元素并返回下標(biāo)示例

    快速查找數(shù)組中的某個(gè)元素并返回下標(biāo)示例

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

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

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

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

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

    JavaScript+CSS實(shí)現(xiàn)唯美蝴蝶動(dòng)畫

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

    對(duì)于防止按鈕重復(fù)點(diǎn)擊的嘗試詳解

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

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

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

最新評(píng)論

龙州县| 长宁区| 越西县| 平泉县| 张家界市| 红安县| 定州市| 嘉鱼县| 大理市| 芜湖市| 沂水县| 宁远县| 阳东县| 芒康县| 佛坪县| 延庆县| 白沙| 中卫市| 同江市| 寻甸| 桓仁| 聂拉木县| 凯里市| 两当县| 三原县| 岳西县| 北京市| 泸州市| 台前县| 石楼县| 东安县| 蒙自县| 安宁市| 双江| 方城县| 阳原县| 吉安市| 佛坪县| 涞源县| 白城市| 义乌市|