国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

js預(yù)編譯(全局預(yù)編譯/函數(shù)預(yù)編譯)

這篇具有很好參考價(jià)值的文章主要介紹了js預(yù)編譯(全局預(yù)編譯/函數(shù)預(yù)編譯)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.預(yù)編譯

預(yù)編譯是上下文創(chuàng)建之后,?js代碼執(zhí)行前的一段時(shí)期,?在這個(gè)時(shí)期,?會(huì)對(duì)js代碼進(jìn)行預(yù)處理。

2.全局預(yù)編譯

全局上下文創(chuàng)建后,會(huì)生成變量對(duì)象VO:var變量-》函數(shù)-》同名函數(shù)覆蓋變量名

  1. VO首先尋找變量聲明,將var聲明的變量作為VO對(duì)象的屬性名,值為undefined。
  2. 然后尋找函數(shù)聲明,屬性值為函數(shù)本身
  3. 如果函數(shù)名與變量名沖突,函數(shù)聲明會(huì)將變量聲明覆蓋。
function a(b, c) {
  console.log(b);          	
  var b = 0
  console.log(b);		
  var b = function () {
    console.log('bbbb')
  }	
  console.log(c);		
  console.log(b);				
}
a(1)

全局預(yù)編譯分析:

        // 第一步:尋找變量聲明var,將變量名作為屬性名,將值設(shè)置為undefined
        VO {
            a: undefined
        }
        // 第二步:尋找函數(shù)聲明,屬性值為函數(shù)本身
        // 第三步:函數(shù)名和變量名沖突,函數(shù)聲明會(huì)覆蓋變量聲明
        VO {
            a: undefined-> function a() { }
        }
//執(zhí)行結(jié)果: function a() { }, 100

3.函數(shù)預(yù)編譯

函數(shù)上下文創(chuàng)建后,會(huì)生成變量對(duì)象AO:函數(shù)預(yù)編譯:?var變量-》形參-》實(shí)參賦值給形參-》函數(shù)-》同名函數(shù)覆蓋變量聲明

  1. 尋找變量聲明,?變量名作為AO對(duì)象的屬性名,?屬性值置為?undefined
  2. 尋找形參,?形參名作為AO對(duì)象的屬性名,?屬性值置為?undefined
  3. 將實(shí)參的值賦予形參,?即替換?AO對(duì)象中形參的屬性值
  4. 尋找函數(shù)聲明,?函數(shù)名作為AO對(duì)象的屬性名,?屬性值為函數(shù)本身
  5. 如果函數(shù)名與變量名沖突,?函數(shù)聲明會(huì)將變量聲明覆蓋?

注意:函數(shù)預(yù)編譯時(shí),如果有判斷條件里面的變量聲明,無論判斷條件真假,都會(huì)進(jìn)行預(yù)編譯。

如下:這里函數(shù)里面的var tmp也會(huì)進(jìn)行預(yù)編譯

js預(yù)編譯(全局預(yù)編譯/函數(shù)預(yù)編譯),JS高級(jí),js預(yù)編譯,AO,VO,全局預(yù)編譯,函數(shù)預(yù)編譯

function a(b, c) {
  console.log(b);          	
  var b = 0
  console.log(b);		
  var b = function () {
    console.log('bbbb')
  }	
  console.log(c);		
  console.log(b);				
}
a(1)

函數(shù)預(yù)編譯解析:

        // 第一步:尋找函數(shù)中的變量聲明,將變量名作為屬性名,將值設(shè)置為undefined
         AO : {
            b: undefined,
        }
        // 第二步:尋找形參
        AO : {
            b: undefined,
            c: undefined,
        }
        // 第三步:將實(shí)參傳給形參(b變成了1)
        AO : {
            b: undefined -> 1,
            c: undefined,
        }

        // 第四步:尋找函數(shù)聲明(此處沒有)
        // 第五步:如果函數(shù)名與變量名沖突,?函數(shù)聲明會(huì)將變量聲明覆蓋(此處沒有)
        // 執(zhí)行結(jié)果:1 ,0,(將函數(shù)賦值給b),undefined, b的函數(shù)體

4.全局預(yù)編譯和函數(shù)預(yù)編譯整個(gè)流程

  1. 全局預(yù)編譯和局部預(yù)編譯都有時(shí),是先進(jìn)行全局預(yù)編譯,預(yù)編譯完成后會(huì)逐行執(zhí)行,比如一些變量賦值,打??;
  2. 函數(shù)預(yù)編譯是在函數(shù)被調(diào)用前才進(jìn)行預(yù)編譯,編譯完成后再開始執(zhí)行;
  3. 執(zhí)行是首先在自己作用域里面查找屬性,有屬性沒有賦值直接返回undefined ,沒有定義屬性從全局查找,查找不到返回undefined

5.預(yù)編譯面試題

        // 面試題
        function fn(a, c) {
            console.log(a)
            var a = 123
            console.log(a)
            console.log(c)
            function a() { }
            if (false) {
                var d = 678
            }
            console.log(d)
            console.log(b)
            var b = function () { }
            console.log(b)
            function c() { }
            console.log(c)
        }
        fn(1, 2)

預(yù)編譯解析:?文章來源地址http://www.zghlxwxcb.cn/news/detail-726036.html

        // 函數(shù)預(yù)編譯: var變量-》形參-》實(shí)參賦值給形參-》函數(shù)-》同名函數(shù)覆蓋變量聲明
        AO:{
            a: undefined->1->funA,
            d: undefined,
            b: undefined-》funB,
            c: 2->funC
        }
        // 執(zhí)行結(jié)果:funA,123,funC,undefined,undefined,funB,funC

到了這里,關(guān)于js預(yù)編譯(全局預(yù)編譯/函數(shù)預(yù)編譯)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Express.js】全局錯(cuò)誤處理

    在前面幾節(jié)里,我們處理異常的方法都是手動(dòng)在可能引發(fā)異常的地方捕捉錯(cuò)誤,這固然是必要的,可以有針對(duì)性得處理異常,但很多時(shí)候,有許多潛在的異常,有一句話叫永遠(yuǎn)不要相信輸入的數(shù)據(jù),你永遠(yuǎn)都不知道什么時(shí)候可能會(huì)以什么方式觸發(fā)某些陰間異常從而造成系統(tǒng)崩

    2024年02月10日
    瀏覽(27)
  • 原生JS設(shè)置并獲取全局變量

    原生JS設(shè)置并獲取全局變量,干貨版。 一共有且只有以下五種方式 1、通過window對(duì)象設(shè)置和獲取全局變量; 通過window對(duì)象設(shè)置和獲取全局變量。window對(duì)象是所有全局變量的擁有者,它是JavaScript的最頂層對(duì)象。我們可以通過window對(duì)象來設(shè)置和獲取全局變量,例如: 2、使用ES6新

    2024年02月08日
    瀏覽(24)
  • 【Express.js】全局變量與配置文件

    通常我們會(huì)將一些項(xiàng)目的配置信息寫在一個(gè)文件內(nèi),然后讀入內(nèi)存并使用。在 express 中使用全局變量有多種方案,我們一起看看有哪些常用的方案 拷貝第一節(jié)的HelloWorld項(xiàng)目 準(zhǔn)備一個(gè)Resp.js模塊: 在 global 對(duì)象中掛載我們需要全局共享的量,比如我們想要掛載一個(gè)全局的confi

    2024年02月16日
    瀏覽(18)
  • 【第2章 Node.js基礎(chǔ)】2.4 Node.js 全局對(duì)象(二) process 對(duì)象

    【第2章 Node.js基礎(chǔ)】2.4 Node.js 全局對(duì)象(二) process 對(duì)象

    process對(duì)象是一個(gè)全局對(duì)象,提供當(dāng)前Node.js 進(jìn)程信息并對(duì)其進(jìn)行控制。通常用于編寫本地命令行程序。 process 對(duì)象是 EventEmitter 類的實(shí)例,因此可以使用事件的方式來處理和監(jiān)聽 process 對(duì)象的各種事件。以下是一些常用的 process 對(duì)象事件: ‘exit’:當(dāng)進(jìn)程即將退出時(shí)觸發(fā)???/p>

    2024年02月05日
    瀏覽(15)
  • 記錄--封裝一個(gè)通過js調(diào)用的全局vue組件

    記錄--封裝一個(gè)通過js調(diào)用的全局vue組件

    在使用vue項(xiàng)目編寫的時(shí)候,不可避免的會(huì)碰到需要時(shí)js api來調(diào)用組件進(jìn)行顯示的情況 例如餓了么element ui 的 Notification 通知、Message 消息提示等組件 雖然已經(jīng)提供了,但是由于api的限制,我們只能通過特定的參數(shù)來有限的改變組件的樣式 之前的文章說過可以使用 new Vue() 、

    2024年02月09日
    瀏覽(33)
  • webpack如何把dist.js中某個(gè)模塊js打包成一個(gè)全局變量,使得在html引入dist.js后可以直接訪問

    webpack如何把dist.js中某個(gè)模塊js打包成一個(gè)全局變量,使得在html引入dist.js后可以直接訪問

    webpack可以通過使用expose-loader來將模塊中的一個(gè)js文件暴露為全局可以訪問的變量。下面是一個(gè)示例代碼: 1、安裝expose-loader npm install expose-loader --save-dev 2、webpack.config.js配置文件 值得注意的是:我在本地使用16.14.2版本的node打包時(shí)會(huì)報(bào)一些警告,升級(jí)node18.12.1未報(bào)警告,警告

    2024年01月24日
    瀏覽(39)
  • C/C++編譯器全局優(yōu)化技術(shù):全局優(yōu)化是針對(duì)整個(gè)程序進(jìn)行的優(yōu)化,包括函數(shù)之間的優(yōu)化

    編程語言的設(shè)計(jì)和實(shí)現(xiàn)與人類心理學(xué)有著密切的聯(lián)系。C++編譯器全局優(yōu)化技術(shù)在這個(gè)領(lǐng)域中是一個(gè)重要的例子。在這篇博客中,我們將從心理學(xué)的角度來探討C++編譯器全局優(yōu)化技術(shù)的原理和實(shí)踐。 人類大腦的神經(jīng)網(wǎng)絡(luò)在處理信息時(shí),會(huì)自動(dòng)進(jìn)行優(yōu)化以提高效率。我們的思維和

    2023年04月26日
    瀏覽(46)
  • JS 高級(jí)用法

    在學(xué)習(xí)JavaScript的過程中,我們必須了解一些基礎(chǔ)知識(shí),如變量、函數(shù)、類、循環(huán)等。這些基礎(chǔ)知識(shí)是我們使用JavaScript的基礎(chǔ)。但是,在日常的業(yè)務(wù)開發(fā)中,我們需要一些更高級(jí)的技巧來更好地解決問題。 通過閱讀本文,你將了解到JS的高級(jí)知識(shí)點(diǎn)以及實(shí)際應(yīng)用技巧,如高級(jí)

    2024年02月16日
    瀏覽(22)
  • 關(guān)于css中設(shè)置變量用于全局Css或者Js中使用

    一、配置變量css文件 src/styles/variables.scss 二、在組件中使用變量

    2024年02月07日
    瀏覽(20)
  • 只使用JS怎么給靜態(tài)頁面網(wǎng)站添加站內(nèi)全局搜索功能?

    只使用JS怎么給靜態(tài)頁面網(wǎng)站添加站內(nèi)全局搜索功能?

    ?? 個(gè)人網(wǎng)站:【 海擁】【神級(jí)代碼資源網(wǎng)站】【辦公神器】 ?? 基于Web端打造的:??輕量化工具創(chuàng)作平臺(tái) ?? 想尋找共同學(xué)習(xí)交流的小伙伴,請(qǐng)點(diǎn)擊【全棧技術(shù)交流群】 靜態(tài)頁面通常由HTML、CSS 和 JavaScript 等靜態(tài)文件組成,這些文件在服務(wù)器上不會(huì)動(dòng)態(tài)生成或修改,所以加

    2024年02月05日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包