亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Javascirpt - 理解執(zhí)行上下文以及作用域鏈

e10101 / 2408人閱讀

摘要:本文章記錄本人在深入學習執(zhí)行上下文以及作用域鏈中看書理解到的一些東西,加深記憶和并且整理記錄下來,方便之后的復習。每個執(zhí)行上下文都與一個作用域鏈關聯在一起。該對象的屬性的值是它被創(chuàng)建時的執(zhí)行上下文對應的作用域鏈。

本文章記錄本人在深入學習執(zhí)行上下文以及作用域鏈中看書理解到的一些東西,加深記憶和并且整理記錄下來,方便之后的復習。

執(zhí)行上下文概念

執(zhí)行上下文,是ECMAScript規(guī)法中用來描述js代碼執(zhí)行的抽象概念。所有的js代碼都是在某個執(zhí)行上下文運行的。在一個執(zhí)行上下文中調用一個函數,會進入一個新的執(zhí)行上下文。調用結束就回到原來的執(zhí)行上下文中。在函數調用的過程中,如果調用了其他的函數,那么將進入一個新的執(zhí)行上下文,就會形成一個執(zhí)行上下文棧。

每個執(zhí)行上下文都與一個作用域鏈關聯在一起。該作用域鏈用來在函數執(zhí)行時求出標識符的值。作用域鏈中包含許多的對象,在標識符進行求值的時候,先從鏈首開始,接著依次查找后面的對象,直到某個對象中的標示符名稱相等的屬性。

執(zhí)行上下文順序

在進入執(zhí)行上下文時候,會按照順序執(zhí)行下面的操作:

創(chuàng)建激活對象
激活對象是在進入執(zhí)行上下文時候創(chuàng)建出來的,并且與新的執(zhí)行上下文關聯在一起。在初始化構造函數的時候,該對象包含一個arguments屬性。激活對象在變量初始化也會用到。

創(chuàng)建作用域鏈
每一個函數都有一個內部屬性[[scope]],它的值是一個包含多個對象的鏈。這個屬性的具體指與函數的創(chuàng)建方式和代碼中的位置有很大的關系。這一步的操作是把上一步創(chuàng)建的激活對象添加到函數的[[scope]]屬性對應的鏈的前面。

變量初始化
對函數中需要用到的變量進行初始化。初始化時使用到的對象是前面創(chuàng)建的激活對象,不過這個時還不能稱作為變量對象。函數的實際參數、內部函數的局部變量是會被初始化的。局部變量是在變量對象創(chuàng)建的過程中創(chuàng)建了同名的屬性,這個屬性值為undefined,在函數執(zhí)行的過程中才會被真正的賦值。

函數上下文環(huán)境

函數總是在自己的執(zhí)行上下文環(huán)境中運行,例如讀/寫局部變量、函數參數,以及運行內部邏輯結構等等。創(chuàng)建上下文環(huán)境的過程中,js會遵守下面的規(guī)則:

根據調用時傳遞的參數創(chuàng)建調用對象。

創(chuàng)建參數對象,存儲參數變量。

創(chuàng)建對象屬性,存儲函數定義的布局變量。

把調用對象放在作用域鏈的頭部,方便檢索。

執(zhí)行函數結構體的代碼。

返回函數的返回值。

作用域

js中作用域又分為詞法作用域(定義作用域)動態(tài)作用域。在函數還沒調用之前,根據函數結構的嵌套關系來確定函數的作用域。因此作用域取決于源代碼,通常編譯器可以進行靜態(tài)的分析來確定標示符的引用。

動態(tài)作用域
動態(tài)作用域(定義作用域),當函數被調用之后,其作用域會因為調用而發(fā)生變化,此時作用域鏈也會隨之調整。

詞法作用域(定義作用域)
詞法作用域(定義作用域)用來說明函數定義是存在的嵌套關系。當函數被執(zhí)行的時候,作用域可能發(fā)生變化。js函數運行在它們的作用域中,而不是它們執(zhí)行的作用域。

3種創(chuàng)建函數的作用域

創(chuàng)建函數有3種方法,分別是:function函數聲明,function表達式和使用function構造器函數。使用不同的創(chuàng)建函數的方式,所scope屬性也會有所不同,從而影響函數執(zhí)行過程中的作用域鏈。

使用函數聲明的函數對象是在進入執(zhí)行上下文的時候變量初始化的過程中創(chuàng)建的。該對象的scope屬性的值是它被創(chuàng)建時的執(zhí)行上下文對應的作用域鏈。

使用函數表達式的函數對象是在該表達式被執(zhí)行的時候創(chuàng)建的。該對象的scope屬性的值與使用函數聲明創(chuàng)建的對象一樣。

使用函數構造器的聲明一個函數通常有兩種方式,常用的就是var funcName = new Function(x1, x2, ... xn),其中x1,x2 ..., xn表示的是該函數的形參,使用該方式的函數對象是在構造器調用的時候創(chuàng)建的。該對象的scope屬性的值一直是一個只包含全局對象的作用域鏈。

  

最后,如果文章有什么錯誤和疑問的地方,請指出。與sf各位共勉!目前是未完待續(xù)?。。?/p>

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

轉載請注明本文地址:http://www.ezyhdfw.cn/yun/85662.html

Failed to recv the data from server completely (SIZE:0/8, REASON:closed)