JavaScript 闭包生命周期

var checker ;
     function myFunc(){
        if(checker){
            checker();
        }
        alert("do myFunc:"+str);//alert_A
        var str = "test.";
        if(!checker){
            checker = function(){
                alert("do Check:"+str);//alert_B
            }
        }
        //装函数实例自身的一个引用返回
        alert(this == myFunc.callee);
        return this;
     }
     myFunc()();
     //输出:
     //1. do myFunc: undefined  -->由alert_A输出,因为str使用后定义,所为结果:undefined
    //2. do myFunc: test.      -->由alert_B输出,str是由第一个方法调用产生的闭包数据
     //3. do myFunc: undefined  -->由alert_A输出。

A.JavaScript中函数实例可能拥有多个闭包。
B.实例与闭包的生存周期是分别管理的。
C.函数被调用时总是初始化一个闭包,该闭包是否被销毁,取决于它是否有被(其它闭包)引用的变量/数据(如上面:str)。

函数执行时创建闭包>>执行中闭包没有被其它对象引用>>函数执行结束闭包被销毁。

原文地址:https://www.cnblogs.com/you000/p/2853675.html