作用域和作用域鏈

2021-08-09 17:39:02 字數 775 閱讀 1489

全域性作用域:全域性的變數執行環境

函式作用域:函式內部的變數執行環境

每個函式都有自己的執行環境,當執行流進入乙個函式時,函式的環境就會被推入乙個環境棧中。函式執行之後,棧將環境彈出,把控制權返回給之前的執行環境。

-全域性作用域只要頁面不解除安裝,就一直存在,不釋放。

-函式每次在呼叫時,都會形成乙個作用域,當函式呼叫結束時,這個作用域就釋放了

傳遞引數,會傳給函式的arguments物件中。

js採用的是詞法作用域規則:

詞法作用域也叫靜態作用域,變數在宣告的時候,它的作用域就定下來來了,與執行時無關。變數的作用域只跟函式的宣告有關,與函式的呼叫無關。

詞法作用域的查詢規則:

1先在函式內找區域性變數,包括形參。

2如果找不到,去定義該函式的作用域中尋找(與函式的呼叫無關)

3以此類推,直到全域性作用域。

作用域鏈:只要是函式,就會形成乙個作用域,如果這個函式被巢狀在其他函式中,那麼外部函式也有自己的作用域,這個一直往上到全域性環境,就形成了乙個條作用域鏈。

變數的搜尋原則:

1從當前作用域開始搜尋變數,如果存在,那麼就直接返回這個變數的值。

2如果不存在,就會往上一層作用域查詢,如果存在,就返回。

3如果不存在,一直查詢到全域性作用域,如果存在,就返回。如果不存在說明該變數是不存在的。

4如果乙個變數不存在

1)獲取這個變數的值會報錯*** is not defined;,

2)給這個變數設定值,那麼設定變數就是隱式全域性變數

作用域和作用域鏈

var a 10 function f1 x,y f1 console.log b 此時b輸出5,因為b 5為隱式的全域性變數 在函式外面使用var 宣告的變數都是全域性變數,作用範圍是程式執行的地方.全域性作用域 函式除外 函式的形參是區域性變數 在函式內部,不使用var 定義的變數,叫隱式全域性...

作用域和作用域鏈

執行環境定義了變數和函式有權訪問的其他資料,決定了他們各自的行為。每個執行環境都有與之對應的變數物件 variable object 儲存著該環境中定義的所有變數和函式。我們無法通過 來訪問變數物件,但是解析器在處理資料時會在後台使用到它。執行環境有全域性執行環境 也稱全域性環境 和函式執行環境之分...

作用域和作用域鏈

作用域與作用域鏈 作用域屬於乙個函式,乙個函式產生了不一樣的作用域 函式名.scope 函式的隱式屬性 scope 指的就是作用域,其中儲存了執行期的上下文的集合,而這一集合就是作用域鏈 查詢變數 從作用域鏈的頂端依次向下查詢 在那個函式裡面查詢變數,就上那個函式的作用域鏈的頂端依次向下查詢變數 2...