成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

JavaScript預(yù)編譯什么意思-創(chuàng)新互聯(lián)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)JavaScript預(yù)編譯什么意思,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序制作、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了江永免費(fèi)建站歡迎大家使用!

JS運(yùn)行三部曲

js運(yùn)行代碼共分三步

  • 語法分析

  • 預(yù)編譯

  • 解釋執(zhí)行

JavaScript代碼在運(yùn)行時,首先會進(jìn)行語法分析,通篇檢查代碼是否存在低級錯誤,然后進(jìn)行預(yù)編譯,整理內(nèi)部的一個邏輯,最后再開始一行一行的執(zhí)行代碼


語法分析

代碼在執(zhí)行之前,系統(tǒng)會通篇掃描一遍,檢查代碼有沒有低級的語法錯誤,比如少寫個大括號。


預(yù)編譯

預(yù)編譯前奏

預(yù)編譯發(fā)生在函數(shù)執(zhí)行的前一刻。變量未經(jīng)聲明就賦值,此變量為全局對象所有

a = 3

var b = c = 4

一切聲明的全局變量,全是window的屬性

var a = 1 ===> window.a = 1


預(yù)編譯四部曲

  1. 創(chuàng)建AO(Activation Object)對象(里面存儲的是函數(shù)內(nèi)部的局部變量)

  2. 找形參和變量聲明,將變量和形參名做為AO屬性名,值為undefined

  3. 將實(shí)參和形參統(tǒng)一

  4. 在函數(shù)體里面找函數(shù)聲明,值賦予函數(shù)體

用一個例子來說明一下,也可以自己先給出一個答案,再繼續(xù)往下看


function fn(a) {
 console.log(a);
 var a = 123;
 console.log(a);
 function a() {}
 console.log(a);
 var b = function() {};
 console.log(b);
 function d() {}
 console.log(d)
}
fn(1);

第一步,創(chuàng)建AO(Activation Object)對象 {}第二步,找形參和變量聲明,將變量和形參名做為AO屬性名,值為undefined


{
 a: undefined,
 b: undefined,
}

第三步,將實(shí)參和形參統(tǒng)一


{
 a: 1,
 b: undefined,
}

第四步,找函數(shù)聲明,值賦予函數(shù)體


{
 a: function a() {},
 b: undefined,
 d: function d() {}
}

所以在函數(shù)fn執(zhí)行的前一刻,a、b、d的值如上所示

所以fn(1)執(zhí)行的結(jié)果為


// ? a() {}
// 123
// 123
// ? () {}
// ? d() {}

在全局作用域里,預(yù)編譯過程有些許不同

  • 創(chuàng)建GO(Global Object)對象(里面存儲的是函數(shù)內(nèi)部的全局變量)GO === window

  • 找形參和變量聲明,將變量和形參名做為GO屬性名,值為undefined

  • 在函數(shù)體里面找函數(shù)聲明,值賦予函數(shù)體

解釋執(zhí)行

一行一行的執(zhí)行代碼


實(shí)踐題

這里有幾個例題,有興趣的可以看一下


function test(a, b) {
 console.log(a);
 console.log(b);
 var b = 234;
 console.log(b);
 a = 123;
 console.log(a);
 function a() {}
 var a;
 b = 234;
 var b = function() {};
 console.log(a);
 console.log(b);
}
test(1);
global = 100;
function fn() {
 console.log(global);
 global = 200;
 console.log(global);
 var global = 300;
}
fn();
var global;
function test() {
 console.log(b);
 if (a) {
  var b = 100;
 }
 c = 234;
 console.log(c);
}
var a;
test();
a = 10;
console.log(c);

上述就是小編為大家分享的JavaScript預(yù)編譯什么意思了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁名稱:JavaScript預(yù)編譯什么意思-創(chuàng)新互聯(lián)
文章地址:http://jinyejixie.com/article30/dehdso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、手機(jī)網(wǎng)站建設(shè)品牌網(wǎng)站設(shè)計、做網(wǎng)站、軟件開發(fā)網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
蕲春县| 教育| 安平县| 威远县| 郴州市| 陈巴尔虎旗| 泰宁县| 富民县| 兴仁县| 甘谷县| 永济市| 宣化县| 珲春市| 苏州市| 新巴尔虎左旗| 拉萨市| 河西区| 灵石县| 玛沁县| 清河县| 五常市| 体育| 新田县| 毕节市| 巴林右旗| 富民县| 莱阳市| 双柏县| 琼中| 石城县| 尖扎县| 辽源市| 潜山县| 延川县| 高阳县| 潜江市| 兴宁市| 内乡县| 谷城县| 临沭县| 日照市|