前端筆記--閉包與做用域鏈

閉包

概念:閉包是指有權訪問另一個函數做用域中的變量的函數閉包

做用域鏈

當訪問一個變量時,解釋器會首先在當前做用域查找標示符,若是沒有找到,就去父做用域找,直到找到該變量的標示符或者不在父做用域中,這就是做用域鏈。函數

做用域

JavaScript中的詞法做用域,在函數定義的時候就被建立。閉包函數因爲引用來外層函數中的變量,因此閉包的做用域鏈上會保存外層函數的變量引用。即便外層函數被銷燬,因爲其詞法做用域的變量還在被閉包所引用,因此這些變量就會繼續保存在內存中不會被垃圾回收。對象

與原型鏈的區別

若是去查找一個普通對象的屬性,可是在當前對象和其原型中都找不到時,會返回undefined;但查找的屬性在做用域鏈中不存在的話就會拋出ReferenceError。ip

閉包應用

  1. 函數柯里化
  2. 局部變量如單例模式
  3. 函數封裝
相關文章
相關標籤/搜索