为什么闭包的变量不会销毁

1,147 阅读1分钟

先来说说一些定义和特性

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的,但是这个函数又是要调用闭包内部的变量,如果销毁了,无法找到该变量,所以 只能保留闭包的变量了