日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js预编译

發(fā)布時間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js预编译 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

大家都知道,javascript是解釋性語言,主要特點為解釋一行執(zhí)行一行。

而在js運行時會進行三件事:1.語法分析 2.預編譯 3.解釋執(zhí)行

  • 語法分析會在代碼執(zhí)行前對代碼進行通篇檢查,以排除一些低級錯誤
  • 預編譯發(fā)生在代碼執(zhí)行的前一刻
  • 解釋執(zhí)行就是執(zhí)行代碼

預編譯的作用:

1、函數(shù)聲明整體提升;

即寫出一個函數(shù)聲明,不管寫在哪里,系統(tǒng)總會將其提升到邏輯最前面。

2、變量聲明提升

例如:

document.write(a); var a = 123; //undefinde;

即相當于:

var a; //提升 document.write(a); a = 123; //undefinde;

而如果直接console.log(a);瀏覽器會進行報錯。//Uncaught ReferenceError: a is not defined (表示a沒有定義);

?

預編譯前奏

1、imply global 暗示全局變量

任何變量,如果變量未經(jīng)聲明就賦值,此變量就為全局對象所有。
例如:

function test(){var a = b =123; } test(); //因為b變量未經(jīng)聲明,所以當在全局訪問a時,a為undefinde,而b為123; window.a //undefinde window.b //123

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

預編譯四部曲:

1、創(chuàng)建AO(Activation object)對象

2、找形參和變量聲明,將變量聲明的名(即變量和形參名)作為AO屬性名,值為undefined;

3、將實參和形參統(tǒng)一;

4、在函數(shù)體里面找函數(shù)聲明,值賦予函數(shù)體(注意此處的函數(shù)聲明要區(qū)別于函數(shù)表達式)

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

真正的預編譯

多了一個全局的GO{}對象

即先創(chuàng)建創(chuàng)建GO/AO對象; (Global Object):全局對象;

//例如: globl = 100; function fn(){console.log(global); //undefined;global = 200;console.log(global); //200;var global = 300; } fn();

其中GO{
global : 100;
}
AO{
global : undefined;
}

在執(zhí)行時,函數(shù)會先在其AO{}對象內找相應的變量,如果AO{}中沒有,再在全局變量GO{}內尋找。

//例題: function test(){console.log(b); //undefined;if (a) {var b = 100;}console.log(b); //undefined 因為在if語句里,此時的a值還為undefined,//所以b不進行賦值。而預編譯是不管if()先執(zhí)行的。c = 234;console.log(c); //234; } var a; test(); a = 10; console.log(c); //234;

GO{
a:undefined;
c:234;
}
AO{
a:undefined;
b:undefined;
}
注:此處的AO{}發(fā)生在全局調用test()之后,a=10之前;?

?

?

?


?

?

?

?

?

總結

以上是生活随笔為你收集整理的js预编译的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。