總結(jié)
定義:閉包可以讓一個函數(shù)訪問并操作其聲明時的作用域中的變量和函數(shù),并且此衅,即使聲明時的作用域消失了,也可以調(diào)用
應(yīng)用:
1.私有變量
2.回調(diào)與計時器
3.綁定函數(shù)上下文
4.偏應(yīng)用函數(shù)
5.函數(shù)重載:緩存記憶、函數(shù)封裝
6.即時函數(shù):獨立作用域、簡潔代碼、循環(huán)叮称、類庫封裝种玛、通過參數(shù)限制作用域內(nèi)的名稱
正文
閉包的定義說法如下:
1、只要能訪問外部變量的就是閉包瓤檐,
2赂韵、所有函數(shù)都是閉包。
3挠蛉、保護一個可重用的局部變量的詞法結(jié)構(gòu)
4祭示、忍者秘籍-- 閉包是一個函數(shù)在創(chuàng)建時允許該自身函數(shù)訪問并操作該自身函數(shù)之外的變量時所創(chuàng)建的作用域
5、閉包可以讓一個函數(shù)訪問并操作其聲明時的作用域中的變量和函數(shù)谴古,并且质涛,即使聲明時的作用域消失了,也可以調(diào)用
注意的是:閉包不是在創(chuàng)建的那一時刻點的狀態(tài)的快照掰担,而是一個真實的封裝汇陆,只要閉包存在,就可以對其進行修改带饱。
最簡單的閉包:
// 全局作用域就是一個閉包
var outerVal = 'lifan'
function oterFn(){
console.log(outerVal)
}
outerFn() // lifan
新的閉包說明:
1.閉包一定是函數(shù)對象
2.閉包和詞法作用域毡代,作用域鏈阅羹,垃圾回收機制息息相關(guān)
3.當函數(shù)一定是在其定義的作用域外進行訪問時,才產(chǎn)生閉包
4.閉包是由該函數(shù)和其上層執(zhí)行上下文共同構(gòu)成