问答详情
源自:5-5 返回值的函数

函数中变量的生存周期

JavaScript中函数的生存周期是不是跟C语言里面一样,在函数结束之后就返还给内存了?就是在函数之外就不能再引用和写入函数里面的变量了?请举例说明。

提问者:Mr_Happens 2015-12-21 12:24

个回答

  • 迷途的马尔斯
    2015-12-21 13:50:54
    已采纳

    Javascript和C语言一样也采用词法作用域(lexical scoping),就像你说的一样,这种特性叫“闭包”,每次调用函数都会创建新的对象来保存局部变量,并把这个对象添加到作用域链中,当函数返回的时候就从作用域链中把这个对象销毁,只有不存在嵌套函数或者其它指向这个函数的引用,它才会被当成垃圾回收,这一点和你的认识有点偏差。

    function counter(){
        var n = 0;
        return {
            count : function(){ return n++; },
            reset : function(){ n = 0; }
        };
    }
    var c = counter(),d = counter();
    c.count();
    d.count();
    c.reset();
    c.count();
    d.count();