js作用域理解

2021-10-01 02:16:19 字數 1456 閱讀 8056

關於預編譯解釋過程

作用域定義:變數(變數作用於又稱上下文)和函式生效(能被訪問)的區域

首先 作用域 隨函式產生而產生  也就是我們常見的【【scope】】

1、每乙個js函式為乙個物件,物件函式屬性與方法,i他們歸js引擎所用 包括可見於不可見  。【【scope】】為其中乙個

2、【【scope】】其中儲存了 執行期上下文的集合  包括go(全域性)、ao(區域性就是預編譯過程中產生的ao)

3、[[scope]]中所儲存的執行期上下文物件的集合,這個集合呈鏈式鏈結,我們把這種鏈式鏈結叫做作用域鏈

要了解作用域鏈 就要知道執行器上下文的含義

執行期上下文:

當函式執行時(預編譯產生),會建立乙個稱為執行期上下文的內部物件。(本質為物件)

乙個執行期上下文定義了乙個函式執行時的環境,

函式每次執行時對應的執行上下文都是獨一無二的,所以多次呼叫乙個函式會導致建立多個執行上下文,

當函式執行完畢,執行上下文被銷毀。

當查詢變數:

查詢變數:從作用域鏈的頂端依次向下查詢  即從ao開始   -   go   

不說了上**

function a() 

var a = 123;

b();

}var gloub = 100;

a();

函式a執行 開啟預編譯(a函式被定義) 產生執行期上下文 go

作用域中鏈中儲存  go 為第乙個資料

當a執行時 產生a函式的ao物件

a函式執行 引發b函式定義 定義時建立go(與a通用乙個)

接著b函式執行 建立b函式自己的ao物件 此時作用域鏈從頂端依次為  b函式ao   a函式ao   公用的go物件

如下圖:

到此函式執行完畢   所有建立的執行期上下文銷毀   【【scope】】置空

直到下一次函式執行時會再次建立執行期上下文

再來一段**

function a() 

c();

}; b();

}a();

執行期上下文建立過程如下:

以上形成的作用域鏈 我所舉例子為巢狀函式 

內層函式可以訪問外層函式的ao值 反之不可以

同級之間的ao也不相通 

Js作用域理解

如何理解 changecolor 函式可以訪問作用域 global scope changecolor scope自己作用域 swapcolor 函式可以訪問作用域 global scope changecolor scope外層函式 和swapcolor scope作用域 如何某乙個變數在當前函式...

JS作用域的理解

簡單來說,閉包是指有權訪問其他函式作用域中的變數的函式,是定義在函式內部的函式。當某個函式被呼叫時,會建立乙個執行環境和相應的作用域鏈,自由變數不斷向父級作用域中查詢其變數的定義。自由變數指當前作用域中沒有定義的變數。父級作用域是指函式定義時的上一級作用域,而不是函式執行的上一級作用域。閉包的使用場...

js作用域鏈的理解

18.12.26 執行環境定義了變數和函式有權訪問的其他資料。每個執行環境都有與之對應的變數物件 variable object 儲存著該環境中定義的所有變數和函式。全域性執行環境是最外圍的乙個執行環境,在web瀏覽器中,我們可以認為他是window物件,因此所有的全域性變數和函式都是作為windo...