概念:閉包是指有權訪問另一個函數做用域中的變量的函數閉包
當訪問一個變量時,解釋器會首先在當前做用域查找標示符,若是沒有找到,就去父做用域找,直到找到該變量的標示符或者不在父做用域中,這就是做用域鏈。函數
JavaScript中的詞法做用域,在函數定義的時候就被建立。閉包函數因爲引用來外層函數中的變量,因此閉包的做用域鏈上會保存外層函數的變量引用。即便外層函數被銷燬,因爲其詞法做用域的變量還在被閉包所引用,因此這些變量就會繼續保存在內存中不會被垃圾回收。對象
若是去查找一個普通對象的屬性,可是在當前對象和其原型中都找不到時,會返回undefined;但查找的屬性在做用域鏈中不存在的話就會拋出ReferenceError。ip