定义(满足条件)
- 一个函数中要嵌套一个内部函数,并且内部函数要访问外部函数的变量
- 内部函数要被外部引用
例:
//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();
school.team("在工作"); // 张三李四在工作
team.team("在嗨皮"); // 张三李四在嗨皮
//school()执行完毕 可是team依然被引用所以变量保存了下来
闭包的优点缺点
- 通过闭包可以让外部环境访问得到函数内部的局部变量。
- 通过闭包可以让全局变量持续保存下来,不随着它的上下文环境一起销毁。(消耗内存)