闭包的相关

当调用函数的时候,都会为之建立一个新的对象来保存局部变量,把这个对象添加至做用域链中。当函数返回的时候,就从做用域链中将这个绑定变量的对象删除。函数

若是不存在嵌套的函数,也没有其余引用指向这个绑定的对象,它就会被回收掉。spa

若是定义了嵌套的函数,每一个嵌套的函数都对应着一个做用域链,而且这个做用域链指向一个变量绑定对象。对象

但若是这些嵌套的函数对象在外部函数中保存下来,那么它们也会和所指向的变量绑定对象同样当作垃圾回收。作用域

可是,若是这个函数定义了嵌套的函数,并将它做为返回值返回或者存储在某处的属性里,这时就会有一个外部引用指向这个嵌套的函数。它就不会被当作垃圾回收,io

而且它所绑定的对象也不会被当作垃圾回收。console

 

    var Book = (function(){
                var bookNum = 0;//不可变
                var s = function(){
                    console.log(bookNum++);
                }
                return s;
            })();function

    这个函数中BOOK至关于S,函数自执行,至关于只执行了一次。外部引用指的对象惟一。变量

     var b = Book;
            var c = Book;
            console.log(b===c);//true;
            垃圾回收

 


            function Book (){
                var bookNum = 0;//不可变
                var s = function(){
                    console.log(bookNum++);
                }
                return s;
            }
            var b = Book();
            var c = Book();
            console.log(b===c);引用

    这个函数b,c分别执行了一次BOOK();至关于有两个外部引用对象指向这个函数。

相关文章
相关标签/搜索