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

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

 更新時間:2021年03月01日 11:56:37   作者:前端布吉島  
這篇文章主要介紹了一起來了解一下JavaScript的預(yù)編譯(小結(jié)),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

JS運行三部曲

js運行代碼共分三步

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

JavaScript代碼在運行時,首先會進行語法分析,通篇檢查代碼是否存在低級錯誤,然后進行預(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. 將實參和形參統(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,
}

第三步,將實參和形參統(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í)行代碼

實踐題

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

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ù)情況下,我們都是采用下面的這種方式來處理預(yù)編譯的一個過程

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

若是遇見復(fù)雜的情況就只能采用最原始的方式來解決問題了

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

相關(guān)文章

  • js截取函數(shù)(indexOf,join等)

    js截取函數(shù)(indexOf,join等)

    下面是js中截取字符串經(jīng)常會用到的一些函數(shù),這里每個函數(shù)都給出了例子,學(xué)習(xí)的朋友可以參考下。
    2010-09-09
  • JS判斷一個數(shù)是否是水仙花數(shù)

    JS判斷一個數(shù)是否是水仙花數(shù)

    水仙花數(shù)是指一個 n 位數(shù) ( n≥3 ),它的每個位上的數(shù)字的 n 次冪之和等于它本身。下面通過本文給大家分享JS判斷一個數(shù)是否是水仙花數(shù),需要的朋友參考下吧
    2017-06-06
  • JS中實現(xiàn)replaceAll的方法(實例代碼)

    JS中實現(xiàn)replaceAll的方法(實例代碼)

    本文是對JS中實現(xiàn)replaceAll的方法進行了詳細的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-11-11
  • 分別用marquee和div+js實現(xiàn)首尾相連循環(huán)滾動效果,僅3行代碼

    分別用marquee和div+js實現(xiàn)首尾相連循環(huán)滾動效果,僅3行代碼

    這是本人2007年進行的一項研究,當時網(wǎng)絡(luò)上沒有什么既精簡又實用的循環(huán)滾動代碼,所以就自己琢磨了段時間,最終找到這個辦法
    2011-09-09
  • 使用Javascript實現(xiàn)復(fù)制粘貼功能的示例代碼

    使用Javascript實現(xiàn)復(fù)制粘貼功能的示例代碼

    本篇文章記錄如何通過js代碼實現(xiàn)復(fù)制內(nèi)容到剪切板,之后可以粘貼到需要的地方的功能,文中通過代碼示例介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-09-09
  • javascript如何操作HTML下拉列表標簽

    javascript如何操作HTML下拉列表標簽

    下拉列表在網(wǎng)站前端開發(fā)中經(jīng)常遇到,如何操作html下拉列表標簽,本篇文章給大家詳解javascript如何操作html下拉列表標簽,需要的朋友可以來參考下
    2015-08-08
  • ES6中Iterator與for..of..遍歷用法分析

    ES6中Iterator與for..of..遍歷用法分析

    這篇文章主要介紹了ES6中Iterator與for..of..遍歷用法,結(jié)合實例形式分析了ES6中Iterator的概念、用法及for..of..遍歷的使用技巧,需要的朋友可以參考下
    2017-03-03
  • JavaScript遞歸操作樹形結(jié)構(gòu)代碼示例

    JavaScript遞歸操作樹形結(jié)構(gòu)代碼示例

    前端樹形結(jié)構(gòu)一般用于網(wǎng)頁的地理位置輸入框,地理位置級聯(lián)選擇,人員的部門選擇等,這篇文章主要給大家介紹了關(guān)于JavaScript遞歸操作樹形結(jié)構(gòu)的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • JavaScript手寫Promise核心原理

    JavaScript手寫Promise核心原理

    這篇文章主要介紹了JavaScript手寫Promise核心原理,promise?可以說是出場率很高的api了,這篇文章手寫一版promise,可以加強對promise的認識
    2022-06-06
  • 基于js 本地存儲(詳解)

    基于js 本地存儲(詳解)

    下面小編就為大家?guī)硪黄趈s 本地存儲(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08

最新評論

怀集县| 祥云县| 乌兰察布市| 临汾市| 新宁县| 宽城| 双城市| 依安县| 宁明县| 柞水县| 石柱| 白水县| 渭南市| 黄冈市| 嘉鱼县| 黄浦区| 湟中县| 和平区| 木兰县| 冷水江市| 修文县| 华容县| 搜索| 合水县| 庆城县| 禹州市| 喀喇沁旗| 广元市| 运城市| 伊通| 蛟河市| 肇源县| 团风县| 华蓥市| 蓝田县| 淮南市| 台东市| 泰州市| 云和县| 堆龙德庆县| 梨树县|