簡單來說,閉包是指有權訪問其他函式作用域中的變數的函式,是定義在函式內部的函式。
當某個函式被呼叫時,會建立乙個執行環境和相應的作用域鏈,自由變數不斷向父級作用域中查詢其變數的定義。
自由變數指當前作用域中沒有定義的變數。
父級作用域是指函式定義時的上一級作用域,而不是函式執行的上一級作用域。
閉包的使用場景基本分為兩種:
1、函式作為返回值
functionf1 ()
}var f1 =f1 ();
var a = 200; //
全域性作用域
f1 (); //
100
2、函式作為引數傳遞
functionf1 ()
}function
f2 (fn)
var f1 =f1 ();
f2 (f1);
//100
實際開發中閉包的應用:常用於封裝變數,以下方法用來判斷使用者是否是第一次載入
functionisfirstload ()
else
}}var firstload =isfirstload ();
firstload (10); //
true
firstload (10); //
false
firstload (20); //
true
firstload (20); //
false
Js作用域理解
如何理解 changecolor 函式可以訪問作用域 global scope changecolor scope自己作用域 swapcolor 函式可以訪問作用域 global scope changecolor scope外層函式 和swapcolor scope作用域 如何某乙個變數在當前函式...
js作用域理解
關於預編譯解釋過程 作用域定義 變數 變數作用於又稱上下文 和函式生效 能被訪問 的區域 首先 作用域 隨函式產生而產生 也就是我們常見的 scope 1 每乙個js函式為乙個物件,物件函式屬性與方法,i他們歸js引擎所用 包括可見於不可見 scope 為其中乙個 2 scope 其中儲存了 執行期...
js作用域鏈的理解
18.12.26 執行環境定義了變數和函式有權訪問的其他資料。每個執行環境都有與之對應的變數物件 variable object 儲存著該環境中定義的所有變數和函式。全域性執行環境是最外圍的乙個執行環境,在web瀏覽器中,我們可以認為他是window物件,因此所有的全域性變數和函式都是作為windo...