定義(滿足條件)
- 一個函數中要嵌套一個內部函數,並且內部函數要訪問外部函數的變量
- 內部函數要被外部引用
例:
//1
function eat(){
var food = "bai";
console.log(food);
}
eat(); // bai 執行完方法後food沒有指向被銷燬
console.log(food); // 沒有可訪問的變量 報錯
//2
function eat(){
var food = 'bai';
return function(){
console.log(food);
}
}
var look = eat();
look(); // bai
look(); // bai
//eat()執行完畢 可是look依然被引用所以變量保存了下來
//3
var school = function () {
var s1 = "張三";
var s2 = "李四";
var team = function (project) {
console.log(s1 + s2 + project);
}
return team;
}
var team = school();
team("在工作"); // 張三李四在工作
team("在嗨皮"); // 張三李四在嗨皮
//school()執行完畢 可是team依然被引用所以變量保存了下來
閉包的優點缺點
- 通過閉包可以讓外部環境訪問得到函數內部的局部變量。
- 通過閉包可以讓全局變量持續保存下來,不隨着它的上下文環境一起銷燬。(消耗內存)