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

資訊專欄INFORMATION COLUMN

執(zhí)行環(huán)境、作用域鏈、變量提升、this

vpants / 860人閱讀

摘要:重點(diǎn)每一個(gè)函數(shù)都有自己的執(zhí)行環(huán)境,每個(gè)執(zhí)行環(huán)境都有一個(gè)與之關(guān)聯(lián)的變量對(duì)象,環(huán)境中定義的變量和函數(shù)都保存在這個(gè)對(duì)象中。即當(dāng)在函數(shù)中查找一個(gè)變量時(shí),是根據(jù)作用域查找的。此掃描的結(jié)果將稱為中的。借鑒文章譯的執(zhí)行上下文和環(huán)境棧是什么

重點(diǎn):每一個(gè)函數(shù)都有自己的執(zhí)行環(huán)境,每個(gè)執(zhí)行環(huán)境都有一個(gè)與之關(guān)聯(lián)的變量對(duì)象,環(huán)境中定義的變量和函數(shù)都保存在這個(gè)對(duì)象中。
這個(gè)對(duì)象就是執(zhí)行上下文對(duì)象:

executionContextObj={
    //變量對(duì)象
    variableObject:{/*函數(shù)中的arguments對(duì)象,參數(shù)、內(nèi)部的變量以及函數(shù)聲明*/]
    //作用域
    scopeChain:{/*variableObject以及所有父執(zhí)行上下文中的variableObject*/},
    this:{}
}

根據(jù)這個(gè)執(zhí)行環(huán)境我們解析以下幾個(gè)問(wèn)題:

1、查找變量的順序(知識(shí)點(diǎn):作用域與作用域鏈)
executionContextObj中的scopeChain是這個(gè)函數(shù)的作用域,scopeChain=variableObject+[[scope]]
varibaleObject為當(dāng)前的變量對(duì)象,[[scope]]為父執(zhí)行上下文的作用域鏈,variableObject位于前面,所以查找變量時(shí)總是先從自身查找,然后依次到父執(zhí)行上下文中查找。
即當(dāng)在函數(shù)中查找一個(gè)變量時(shí),是根據(jù)作用域查找的。

2、this是什么?和作用域的區(qū)別
this總是指向函數(shù)調(diào)用時(shí)的環(huán)境(動(dòng)態(tài)作用域即運(yùn)行時(shí)上下文)
作用域保存的是函數(shù)被定義時(shí)的環(huán)境(靜態(tài)作用域即編程時(shí)的上下文)
我們知道javascript沒(méi)有塊級(jí)作用域,最小單位為函數(shù),作用域能訪問(wèn)到函數(shù)中的變量,this則指向調(diào)用者,即可訪問(wèn)對(duì)象中的變量

3、提升,函數(shù)提升總是優(yōu)先于變量提升(為什么可以先使用后定義)
參考:[【譯】JS的執(zhí)行上下文和環(huán)境棧是什么?]

在調(diào)用函數(shù)時(shí),但是在執(zhí)行里面的代碼之前,會(huì)對(duì)函數(shù)進(jìn)行一次掃描,解釋器通過(guò)掃描傳入的參數(shù)或參數(shù)的函數(shù)、本地函數(shù)聲明和局部函數(shù)聲明來(lái)創(chuàng)建executionContextObj。此掃描的結(jié)果將稱為executionContextObj中的variableObject。

就是因?yàn)樵诖a運(yùn)行之前,解釋器已經(jīng)掃描過(guò)在函數(shù)中變量和函數(shù),已經(jīng)創(chuàng)建這些變量,所以在代碼執(zhí)行時(shí),這些變量就可以直接使用,并且函數(shù)的提升優(yōu)先于變量。

借鑒文章:【譯】JS的執(zhí)行上下文和環(huán)境棧是什么?https://juejin.im/post/5c8554...

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

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

相關(guān)文章

  • 形象化模擬作用域鏈,深入理解js作用域、閉包

    摘要:至此作用域鏈創(chuàng)建完畢。好了,通過(guò)深入理解作用域鏈,我們能跟好的理解的運(yùn)行機(jī)制和閉包的原理。 前言 理解javascript中的作用域和作用域鏈對(duì)我們理解js這們語(yǔ)言。這次想深入的聊下關(guān)于js執(zhí)行的內(nèi)部機(jī)制,主要討論下,作用域,作用域鏈,閉包的概念。為了更好的理解這些東西,我模擬了當(dāng)一個(gè)函數(shù)執(zhí)行時(shí),js引擎做了哪些事情--那些我們看不見的動(dòng)作。 關(guān)鍵詞: 執(zhí)行環(huán)境 作用域 作用域鏈 變...

    txgcwm 評(píng)論0 收藏0
  • JS核心知識(shí)點(diǎn)梳理——上下文、作用域、閉包、this(上)

    摘要:引言滿滿的干貨,面試必系列,參考大量資料,并集合自己的理解以及相關(guān)的面試題,對(duì)核心知識(shí)點(diǎn)中的作用域閉包上下文進(jìn)行了梳理。如果在小區(qū)這個(gè)作用域找到了張老師,我就會(huì)在張老師的輔導(dǎo)下學(xué)鋼琴我張老師房間鋼琴構(gòu)成了學(xué)琴的上下文環(huán)境。 showImg(https://segmentfault.com/img/bVbo4hv?w=1800&h=1000); 引言 滿滿的干貨,面試必bei系列,參考大...

    Andrman 評(píng)論0 收藏0
  • JavaScript基礎(chǔ)系列---執(zhí)行環(huán)境作用域鏈

    摘要:延長(zhǎng)作用域鏈下面兩種語(yǔ)句可以在作用域鏈的前端臨時(shí)增加一個(gè)變量對(duì)象以延長(zhǎng)作用域鏈, 問(wèn)題 今天看筆記發(fā)現(xiàn)自己之前記了一個(gè)關(guān)于同名標(biāo)識(shí)符優(yōu)先級(jí)的內(nèi)容,具體是下面這樣的: 形參優(yōu)先級(jí)高于當(dāng)前函數(shù)名,低于內(nèi)部函數(shù)名 形參優(yōu)先級(jí)高于arguments 形參優(yōu)先級(jí)高于只聲明卻未賦值的局部變量,但是低于聲明且賦值的局部變量 函數(shù)和變量都會(huì)聲明提升,函數(shù)名和變量名同名時(shí),函數(shù)名的優(yōu)先級(jí)要高。執(zhí)行代...

    J4ck_Chan 評(píng)論0 收藏0
  • JS:執(zhí)行環(huán)境作用域鏈變量提升、this

    JS:執(zhí)行環(huán)境、作用域鏈、變量提升、this

    scwang90 評(píng)論0 收藏0
  • “動(dòng)靜結(jié)合” 小白初探靜態(tài)(詞法)作用域,作用域鏈執(zhí)行環(huán)境(EC)

    摘要:圖片中的作用域鏈,是全局執(zhí)行環(huán)境中的作用域鏈。然后此活動(dòng)對(duì)象被推入作用域鏈的最前端。在最后調(diào)用的時(shí)候,創(chuàng)建先構(gòu)建作用域鏈,再創(chuàng)建執(zhí)行環(huán)境,再創(chuàng)建執(zhí)行環(huán)境的時(shí)候發(fā)現(xiàn)了一個(gè)變量標(biāo)識(shí)符。 從圖書館翻過(guò)各種JS的書之后,對(duì)作用域/執(zhí)行環(huán)境/閉包這些概念有了一個(gè)比較清晰的認(rèn)識(shí)。 栗子說(shuō)明一切 第一個(gè)栗子 來(lái)看一個(gè)來(lái)自ECMA-262的栗子: var x = 10; (function foo(...

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

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

0條評(píng)論

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