亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

一起來(lái)了解一下JavaScript的預(yù)編譯(小結(jié))

瀏覽:116日期:2023-10-03 17:38:00
JS運(yùn)行三部曲

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

語(yǔ)法分析 預(yù)編譯 解釋執(zhí)行

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

語(yǔ)法分析

代碼在執(zhí)行之前,系統(tǒng)會(huì)通篇掃描一遍,檢查代碼有沒(méi)有低級(jí)的語(yǔ)法錯(cuò)誤,比如少寫個(gè)大括號(hào)。

預(yù)編譯預(yù)編譯前奏

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

a = 3

var b = c = 4

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

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

預(yù)編譯四部曲 創(chuàng)建AO(Activation Object)對(duì)象(里面存儲(chǔ)的是函數(shù)內(nèi)部的局部變量) 找形參和變量聲明,將變量和形參名做為AO屬性名,值為undefined 將實(shí)參和形參統(tǒng)一 在函數(shù)體里面找函數(shù)聲明,值賦予函數(shù)體

用一個(gè)例子來(lái)說(shuō)明一下,也可以自己先給出一個(gè)答案,再繼續(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)對(duì)象 {}第二步,找形參和變量聲明,將變量和形參名做為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ù)編譯過(guò)程有些許不同

創(chuàng)建GO(Global Object)對(duì)象(里面存儲(chǔ)的是函數(shù)內(nèi)部的全局變量)GO === window 找形參和變量聲明,將變量和形參名做為GO屬性名,值為undefined 在函數(shù)體里面找函數(shù)聲明,值賦予函數(shù)體解釋執(zhí)行

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

實(shí)踐題

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

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);總結(jié)

多數(shù)情況下,我們都是采用下面的這種方式來(lái)處理預(yù)編譯的一個(gè)過(guò)程

函數(shù)聲明,整體提升 變量聲明,聲明提升

若是遇見(jiàn)復(fù)雜的情況就只能采用最原始的方式來(lái)解決問(wèn)題了

到此這篇關(guān)于一起來(lái)了解一下JavaScript的預(yù)編譯(小結(jié))的文章就介紹到這了,更多相關(guān)JavaScript 預(yù)編譯內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 久草在线看 | 精品一区二区三区免费站 | 欧美亚洲国产一区 | 亚洲性久久久影院 | 亚洲午夜综合网 | 手机看片免费基地你懂的 | 在线观看中文字幕一区 | 99久久免费视频在线观看 | 欧美久久久久久久久 | 亚洲欧美国产中文 | 偷柏自拍亚洲欧美综合在线图 | 欧美性色xo影院在线观看 | jyzzjyzz国产免费观看 | 国产精品午夜免费观看网站 | 国产人做人爱免费视频 | 国产国产成人人免费影院 | 2020国产微拍精品一区二区 | 国产亚洲精品久久麻豆 | freexxxx性特大另类ww | 黄色一级毛片 | 精品国产精品 | 亚洲天堂久久久 | 一级毛片aaa片免费观看 | 妖精www成人动漫在线观看 | 国产中文字幕视频 | 成人软件网18免费视频 | 99久久99热久久精品免费看 | 中文字幕一区二区在线视频 | 国产v欧美v日韩在线观看 | 99久久久久国产精品免费 | 午夜性刺激免费视频观看不卡专区 | 国产一区二区在线观看视频 | 免费看一级| 国产精品国产自线在线观看 | 国产一区二三区 | 色婷婷久久综合中文久久蜜桃 | 草在线视频 | 国产香蕉影视院 | 永久免费不卡在线观看黄网站 | 偷拍亚洲欧美 | 久久五月女厕所一区二区 |