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

  • 相关阅读:
    x64 平台开发 Mapxtreme 编译错误
    hdu 4305 Lightning
    Ural 1627 Join(生成树计数)
    poj 2104 Kth Number(可持久化线段树)
    ural 1651 Shortest Subchain
    hdu 4351 Digital root
    hdu 3221 Bruteforce Algorithm
    poj 2892 Tunnel Warfare (Splay Tree instead of Segment Tree)
    hdu 4031 Attack(BIT)
    LightOJ 1277 Looking for a Subsequence
  • 原文地址:https://www.cnblogs.com/carr-css/p/6065398.html
Copyright © 2011-2022 走看看