zoukankan      html  css  js  c++  java
  • 闭包的相关

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

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

    如果定义了嵌套的函数,每个嵌套的函数都对应着一个作用域链,并且这个作用域链指向一个变量绑定对象。

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

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

    并且它所绑定的对象也不会被当做垃圾回收。

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

        这个函数中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();相当于有两个外部引用对象指向这个函数。

  • 相关阅读:
    MySQL Workbench的使用教程 (初级入门版)
    优化MySQL语句的十个建议
    Openfire+Spark+Spark Web安装配置(一)
    agsxmpp官方源代码
    (转载)Oracle中删除外键约束、禁用约束、启用约束
    8.手工备份恢复备用数据库(练习10、11)
    (转载)图文推荐给开发人员非常实用的站点
    13.服务器管理恢复RMAN备份(练习20)
    9.手工备份恢复表空间时间点恢复(练习12.13.14)
    12.服务器管理恢复RMAN配置(练习19)
  • 原文地址:https://www.cnblogs.com/carr-css/p/6065398.html
Copyright © 2011-2022 走看看