全域性作用域:全域性的變數執行環境
函式作用域:函式內部的變數執行環境
每個函式都有自己的執行環境,當執行流進入乙個函式時,函式的環境就會被推入乙個環境棧中。函式執行之後,棧將環境彈出,把控制權返回給之前的執行環境。
-全域性作用域只要頁面不解除安裝,就一直存在,不釋放。
-函式每次在呼叫時,都會形成乙個作用域,當函式呼叫結束時,這個作用域就釋放了
傳遞引數,會傳給函式的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...