成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript-執(zhí)行上下文

tolerious / 3622人閱讀

摘要:一執(zhí)行上下文概念當(dāng)函數(shù)執(zhí)行時(shí),會(huì)創(chuàng)建一個(gè)稱為執(zhí)行上下文的內(nèi)部對(duì)象可理解為作用域。一個(gè)執(zhí)行上下文定義了一個(gè)函數(shù)執(zhí)行時(shí)的環(huán)境。三變量對(duì)象概念變量對(duì)象是與執(zhí)行上下文相關(guān)的數(shù)據(jù)作用域。閱讀更多參考文章了解的執(zhí)行上下文論代碼執(zhí)行上下文

一、執(zhí)行上下文 1.1 概念
當(dāng)函數(shù)執(zhí)行時(shí),會(huì)創(chuàng)建一個(gè)稱為執(zhí)行上下文的內(nèi)部對(duì)象(可理解為作用域)。一個(gè)執(zhí)行上下文定義了一個(gè)函數(shù)執(zhí)行時(shí)的環(huán)境
二、產(chǎn)生執(zhí)行上下文的兩個(gè)階段

(1)在JavaScript解釋器內(nèi)部,每次調(diào)用執(zhí)行上下文,分為兩個(gè)階段,①創(chuàng)建階段②激活/代碼執(zhí)行階段

2.1 創(chuàng)建階段

第一階段是創(chuàng)建階段,(當(dāng)函數(shù)被調(diào)用,但未執(zhí)行任何其內(nèi)部代碼之前)。在創(chuàng)建階段主要做三件事:

(1)創(chuàng)建作用域鏈(Scope Chain)。
(2)創(chuàng)建變量對(duì)象(函數(shù)的形參、函數(shù)聲明、變量聲明)。
(3)求”this“的值。

當(dāng)調(diào)用foo(22)時(shí),創(chuàng)建狀態(tài)如下所示

2.2 激活/代碼執(zhí)行階段

(1)創(chuàng)建狀態(tài)負(fù)責(zé)處理定義屬性的名字,不為其指派具體的值,以及形參/實(shí)參的處理。

(2)一旦創(chuàng)建階段完成,執(zhí)行流進(jìn)入函數(shù)并且激活/代碼執(zhí)行階段,Execution Context object就會(huì)更新。

2.3 三個(gè)屬性

(1)對(duì)于每個(gè)執(zhí)行上下文(Execution Context)都有三個(gè)重要的屬性,①變量對(duì)象(Variable object,VO),②作用域鏈(Scope chain)和 ③this。

三、變量對(duì)象(Variable Object) 3.1 概念

(1)變量對(duì)象(variable object) 是與執(zhí)行上下文相關(guān)的 數(shù)據(jù)作用域(scope of data) 。

(2)VO是與上下文關(guān)聯(lián)的特殊對(duì)象,用于存儲(chǔ)被定義在上下文中的 變量(variables) 和 函數(shù)聲明(function declarations) 。

(3)VO是一個(gè)抽象的概念,不同的上下文中,它表示使用不同的object。例如,在global全局上下文中,變量對(duì)象也是全局對(duì)象自身[global object]。(這就是我們可以通過全局對(duì)象的屬性來指向全局變量)。

3.2 初始化過程

進(jìn)入執(zhí)行上下文時(shí),VO的初始化過程具體如下:

(1)函數(shù)的形參(當(dāng)進(jìn)入函數(shù)執(zhí)行上下文時(shí)) 變量對(duì)象的一個(gè)屬性,其屬性名就是形參的名字,其值就是實(shí)參的值;對(duì)于沒有傳遞的參數(shù),其值為undefined。

(2)函數(shù)聲明(FunctionDeclaration, FD) 變量對(duì)象的一個(gè)屬性,其屬性名和值都是函數(shù)對(duì)象創(chuàng)建出來的;如果變量對(duì)象已經(jīng)包含了相同名字的屬性,則替換它的值。

(3)變量聲明(var,VariableDeclaration) 變量對(duì)象的一個(gè)屬性,其屬性名即為變量名,其值為undefined;如果變量名和已經(jīng)聲明的函數(shù)名或者函數(shù)的參數(shù)名相同,則不會(huì)影響已經(jīng)存在的屬性。

四、活動(dòng)對(duì)象(Activation object)

(1)只有全局上下文變量對(duì)象允許通過VO的屬性名稱間接訪問;

(2)在函數(shù)執(zhí)行上下文中,VO是不能直接訪問的,此時(shí)由激活對(duì)象(Activation Object,縮寫為AO)扮演VO的角色。

(3)激活對(duì)象是在進(jìn)入函數(shù)上下文時(shí)刻被創(chuàng)建的,它通過函數(shù)的arguments屬性初始化。

五、VO和AO的關(guān)系
對(duì)于VO和AO的關(guān)系可以理解為,VO在不同的Execution Context中會(huì)有不同的表現(xiàn):當(dāng)在**Global Execution
Context中,可以直接使用VO;但是,在函數(shù)Execution Context中,AO**就會(huì)被創(chuàng)建。

閱讀更多

參考文章

了解JavaScript的執(zhí)行上下文

JavaScript 論代碼執(zhí)行上下文

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/95039.html

相關(guān)文章

  • 前端進(jìn)階系列(七):什么是執(zhí)行下文?什么是調(diào)用棧?

    摘要:什么是中的調(diào)用棧調(diào)用棧就像是程序當(dāng)前執(zhí)行的日志。當(dāng)函數(shù)執(zhí)行結(jié)束時(shí),將從調(diào)用棧中出去。了解全局和局部執(zhí)行上下文是掌握作用域和閉包的關(guān)鍵??偨Y(jié)引擎創(chuàng)建執(zhí)行上下文,全局存儲(chǔ)器和調(diào)用棧。 原文作者:Valentino 原文鏈接:https://www.valentinog.com/blog/js-execution-context-call-stack 什么是Javascript中的執(zhí)行上下文...

    leone 評(píng)論0 收藏0
  • JavaScript深入之執(zhí)行下文

    摘要:深入系列第七篇,結(jié)合之前所講的四篇文章,以權(quán)威指南的為例,具體講解當(dāng)函數(shù)執(zhí)行的時(shí)候,執(zhí)行上下文棧變量對(duì)象作用域鏈?zhǔn)侨绾巫兓摹G把栽谏钊胫畧?zhí)行上下文棧中講到,當(dāng)代碼執(zhí)行一段可執(zhí)行代碼時(shí),會(huì)創(chuàng)建對(duì)應(yīng)的執(zhí)行上下文。 JavaScript深入系列第七篇,結(jié)合之前所講的四篇文章,以權(quán)威指南的demo為例,具體講解當(dāng)函數(shù)執(zhí)行的時(shí)候,執(zhí)行上下文棧、變量對(duì)象、作用域鏈?zhǔn)侨绾巫兓摹?前言 在《Jav...

    gougoujiang 評(píng)論0 收藏0
  • JavaScript深入之執(zhí)行下文

    摘要:深入系列第三篇,講解執(zhí)行上下文棧的是如何執(zhí)行的,也回答了第二篇中的略難的思考題。 JavaScript深入系列第三篇,講解執(zhí)行上下文棧的是如何執(zhí)行的,也回答了第二篇中的略難的思考題。 順序執(zhí)行? 如果要問到 JavaScript 代碼執(zhí)行順序的話,想必寫過 JavaScript 的開發(fā)者都會(huì)有個(gè)直觀的印象,那就是順序執(zhí)行,畢竟: var foo = function () { ...

    codecraft 評(píng)論0 收藏0
  • 「JS篇」JavaScript 執(zhí)行下文和提升

    摘要:執(zhí)行上下文當(dāng)代碼運(yùn)行的時(shí)候,運(yùn)行代碼的環(huán)境形成了執(zhí)行上下文,執(zhí)行上下文決定代碼可以訪問哪些變量函數(shù)對(duì)象等。我們將執(zhí)行上下文簡單視為運(yùn)行當(dāng)前代碼的,我們知道作用域分為和。完成后,其執(zhí)行堆棧將從堆棧中刪除,將控制權(quán)交給全局執(zhí)行上下文。 我們通常將 JavaScript 歸類為動(dòng)態(tài)或解釋執(zhí)行語言,但實(shí)際上它也是一門編譯語言,它有自己的編譯器形式,運(yùn)行在 JavaScript 引擎中。 每個(gè) ...

    googollee 評(píng)論0 收藏0
  • JavaScript深入之閉包

    摘要:深入系列第八篇,介紹理論上的閉包和實(shí)踐上的閉包,以及從作用域鏈的角度解析經(jīng)典的閉包題。定義對(duì)閉包的定義為閉包是指那些能夠訪問自由變量的函數(shù)。 JavaScript深入系列第八篇,介紹理論上的閉包和實(shí)踐上的閉包,以及從作用域鏈的角度解析經(jīng)典的閉包題。 定義 MDN 對(duì)閉包的定義為: 閉包是指那些能夠訪問自由變量的函數(shù)。 那什么是自由變量呢? 自由變量是指在函數(shù)中使用的,但既不是函數(shù)參數(shù)也...

    caige 評(píng)論0 收藏0
  • 深入理解JavaScript執(zhí)行下文執(zhí)行

    摘要:執(zhí)行上下文和執(zhí)行棧是中關(guān)鍵概念之一,是難點(diǎn)之一。理解執(zhí)行上下文和執(zhí)行棧同樣有助于理解其他的概念如提升機(jī)制作用域和閉包等。函數(shù)執(zhí)行完成,函數(shù)的執(zhí)行上下文出棧,并且被銷毀。 前言 如果你是一名 JavaScript 開發(fā)者,或者想要成為一名 JavaScript 開發(fā)者,那么你必須知道 JavaScript 程序內(nèi)部的執(zhí)行機(jī)制。執(zhí)行上下文和執(zhí)行棧是JavaScript中關(guān)鍵概念之一,是Ja...

    silenceboy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<