先来说说一些定义和特性
1、闭包是什么?
闭包是一个函数内部定义了一个函数。返回函数时,相关参数和变量都保存在返回的函数中
function count() {
var arr = [];
for (var i = 1; i <= 3; i++) {
arr.push(function () {
return i * i;
});
}
return arr;
}
var result = count();
2、闭包不调用不执行
var result = count();
console.log(result); //[ƒ, ƒ, ƒ] ;rusult中保存了三个方法 ,三个方法都还没执行
var f1 = result[0]; // ƒ(){ return i*i;} i = 1
var f2 = result[1]; // ƒ(){ return i*i;} i = 2
var f3 = result[2]; // ƒ(){ return i*i;} i = 3
// i = 4; 方法不调用不执行!!
console.log(f1()); // 执行 i*i= 4*4 = 16
console.log(f2()); // 执行 i*i= 4*4 = 16
console.log(f3()); // 执行 i*i= 4*4 = 16
为什么闭包的变量不会销毁
正常来说 一个函数执行完毕都会立即销毁,但是在闭包中的函数调用了闭包的变量,一般是要将闭包内的函数返回给window的,但是这个函数又是要调用闭包内部的变量,如果销毁了,无法找到该变量,所以 只能保留闭包的变量了