真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JavaScript執(zhí)行上下文的處理過(guò)程-創(chuàng)新互聯(lián)

小編給大家分享一下JavaScript執(zhí)行上下文的處理過(guò)程,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),黑龍江企業(yè)網(wǎng)站建設(shè),黑龍江品牌網(wǎng)站建設(shè),網(wǎng)站定制,黑龍江網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,黑龍江網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

在《深入學(xué)習(xí)js之——執(zhí)行上下文?!分姓f(shuō)過(guò),當(dāng)JavaScript代碼執(zhí)行一段可執(zhí)行代碼(executable code)時(shí),會(huì)創(chuàng)建對(duì)應(yīng)的執(zhí)行上下文(execution context)

對(duì)于每一個(gè)執(zhí)行上下文,都有三個(gè)重要的屬性:

變量對(duì)象(Variable object VO)
作用域鏈(Scope chain)
this

本文我們結(jié)合著這三個(gè)部分的內(nèi)容,講講執(zhí)行上下文的具體處理過(guò)程。

思考題

在《深入學(xué)習(xí)js之——詞法作用域和動(dòng)態(tài)作用域》中,提出這樣一道思考題:

// 思考題一:
var scope = "global scope";
function checkscope(){
  var scope = "local scope";
  function f(){
    return scope;
  }
  return f();
}
checkscope();

// 思考題二:
var scope = "global scope";
function checkscope(){
    var scope = "local scope";
    function f(){
        return scope;
    }
    return f;
}
checkscope()();

兩段代碼都會(huì)打印local scope,但是還是有些許差異的,本文就詳細(xì)的解析執(zhí)行上下文棧執(zhí)行上下文的具體變化過(guò)程。

具體分析

我們分析第一段代碼:

var scope = "global scope";
function checkscope(){
    var scope = "local scope";
    function f(){
        return scope;
    }
    return f();
}
checkscope();

執(zhí)行過(guò)程如下:

1、執(zhí)行全局代碼,創(chuàng)建全局執(zhí)行上下文,全局上下文被壓入執(zhí)行上下文棧

ECStack = [
  globalContext
];

2、全局上下文初始化

globalContext = {
  VO: [global],
  Scope: [globalContext.VO],
  this: globalContext.VO
}

2、初始化的同時(shí),checkscope 函數(shù)被創(chuàng)建,保存作用域鏈到函數(shù)內(nèi)部的屬性[[scope]]

checkscope.[[scope]] = [
  globalContext.VO
];

3、執(zhí)行checkScope 函數(shù),創(chuàng)建checkScope 函數(shù)執(zhí)行上下文,checkScope 函數(shù)執(zhí)行上下文被壓入執(zhí)行上下文棧:

ECStack = [
  checkscopeContext,
  globalContext
];

4、checkscope 函數(shù)執(zhí)行上下文初始化:

1.復(fù)制函數(shù) [[scope]] 屬性創(chuàng)建作用域鏈,
2.用 arguments 創(chuàng)建活動(dòng)對(duì)象,
3.初始化活動(dòng)對(duì)象,即加入形參、函數(shù)聲明、變量聲明,
4.將活動(dòng)對(duì)象壓入 checkscope 作用域鏈頂端,

同時(shí) f 函數(shù)被創(chuàng)建,保存作用域鏈到 f 函數(shù)的內(nèi)部屬性[[scope]]

checkscopeContext = {
  AO: {
      arguments: {
        length: 0
      },
      scope: undefined,
      f: reference to function f(){}
  },
  Scope: [AO, globalContext.VO],
  this: undefined
}

5、執(zhí)行f函數(shù),創(chuàng)建 f 函數(shù)執(zhí)行上下文,f 函數(shù)執(zhí)行上下文被壓入執(zhí)行上下文棧

  ECStack = [
    fContext,
    checkscopeContext,
    globalContext
  ]

6、f 函數(shù)執(zhí)行上下文初始化, 以下跟第 4 步相同:

1.復(fù)制函數(shù) [[scope]] 屬性創(chuàng)建作用域鏈
2.用 arguments 創(chuàng)建活動(dòng)對(duì)象
3.初始化活動(dòng)對(duì)象,即加入形參、函數(shù)聲明、變量聲明
4.將活動(dòng)對(duì)象壓入 f 作用域鏈頂端
  fContext = {
    AO: {
        arguments: {
            length: 0
        }
    },
    Scope: [AO, checkscopeContext.AO, globalContext.VO],
    this: undefined
  }

7、f 函數(shù)執(zhí)行,沿著作用域鏈查找 scope 值,返回 scope 值

8、f 函數(shù)執(zhí)行完畢,f 函數(shù)上下文從執(zhí)行上下文棧中彈出

ECStack = [
  checkscopeContext,
  globalContext
]

9、checkscope 函數(shù)執(zhí)行完畢,checkscope 執(zhí)行上下文從執(zhí)行上下文棧中彈出

ECStack = [
  globalContext
]

以上是“JavaScript執(zhí)行上下文的處理過(guò)程”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。


新聞標(biāo)題:JavaScript執(zhí)行上下文的處理過(guò)程-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://weahome.cn/article/dchsdi.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部