js的作用域鏈

2021-10-02 19:06:31 字數 784 閱讀 6623

js作用域鏈就是函式或者變數在何處能被訪問。那就要看js引擎怎麼去處理程式的執行。

1.在程式執行的前一刻建立活動物件(函式作用域/執行期上下文/go/ao)

2.將var關鍵字宣告的變數作為go物件的屬性名,賦值為undefined,如果存在變數重名,則後乙個把前乙個覆蓋

3.將function 宣告的函式的函式名作為go物件的屬性名,給他賦值為的函式體,如果函式名有重名,後乙個覆蓋前乙個,如果函式名和變數民重名。則變數名覆蓋函式名。

4.在函式體執行的前一刻建立乙個活動物件ao,

5.將var關鍵字宣告的變數和形參作為函式的屬性名。賦值為undefined,變數有重名直接覆蓋,變數與形參有重名,變數覆蓋形參。

6.同第三步 不過此時函式名是作為ao物件的屬性名

7.如果函式體內還有函式,同五 六兩步。

了解了執行週期我們再來看看作用域,在js中分為全域性作用域和區域性作用域。全域性作用域就相當於我們上面第一步說的在go,在這下面的變數和函式,基本上在任何地方都能被訪問,這就是全域性作用域。然後區域性作用域就相當於ao,就比較多了,在函式內就相當於乙個區域性作用域,在這個區域性作用域內宣告的函式和變數在全域性作用域下是不能被訪問的,但是在這個區域性作用域下是可以訪問到全域性作用域裡面的函式和變數的。但是在函式的作用域內是還會出現函式的,那麼這個函式也會形成乙個作用域,這個函式裡面宣告的函式與變數同樣是不能被外面的函式作用域下或者全域性作用域下所訪問的。但是這個函式同樣是可以訪問到外面的函式作用域內宣告的變數與函式 和 全域性作用域下的函式與變數。這樣一來作用域鏈就形成了,在最裡面的作用域裡可以一級一級的向上一級作用域訪問所需要的方法與變數。

js 作用域鏈

作用域鏈 作用域鏈就是內部上下文的變數物件vo的列表,作用域鏈用來檢索上下文出現的識別符號,從而保證有序訪問所有變數和函式。乙個作用域鏈包括父級變數物件 variable object 作用域鏈的頂部 函式自身變數vo和活動物件 activation object 當查詢識別符號的時候,會從作用域鏈...

JS作用域和作用域鏈

什麼是js作用域?js作用域也就是js識別變數的範圍 1 全域性作用域 2 區域性作用域 3 e6的塊級作用域 全域性作用域 也就是定義在window下的變數範圍,在任何地方都可以訪問 區域性作用域 是只在函式內部定義的變數範圍 塊級作用域 簡單來說就是用let和const在任意的 塊中定義的變數都...

JS作用鏈和作用域

js作用域也就是js識別變數的範圍,作用域鏈也就是js查詢變數的順序 先說作用域,js作用域主要包括全域性作用域 區域性作用域和es6的塊級作用域 全域性作用域 也就是定義在window下的變數範圍,在任何地方都可以訪問,區域性作用域 是只在函式內部定義的變數範圍 塊級作用域 簡單來說用let和co...