zoukankan      html  css  js  c++  java
  • 闭包

    闭包

    广义,闭包:所有函数

    狭义,闭包:满足2个条件

    • 一个函数嵌套一个内部函数,且内部函数访问外部变量。
    • 内部函数必须被外部引用。

    好处:让局部变量持续保存。

    劣势:局部变量一直存在,占内存,导致内存浪费。

    let outer=function(){
        let a=100;
        let inner=function(){
            a++;    // 内部函数访问外部变量
            console.log(a);
        }
    }
    return inner;  // 返回到外部,没有被'销毁'
    let func=outer();
    func(); // 101
    func(); // 102
    func(); // 103
    1、
        function Foo(){
            var i=0;
            return function(){
                console.log(i++);
            }
    
        }
        var f1=Foo();
        var f2=Foo(); // 新的Foo,i不变
        f1(); // 0
        f2(); // 0
        f2(); // 1   没有新的上下文,还是之前f2的Foo
    2、
        function f1(){
            var n=999;   
            //nAdd和result
            nAdd=function(){n+=1}; // nAdd是全局变量,作为引用
            function f2(){console.log(n)};
            return f2;
        }
    
        var result=f1();
        // 以下3个引用的scope是同一个
        result(); // 999
        //f1(); 
        nAdd(); // 没有打印
        result(); // 1000
     
  • 相关阅读:
    Ethical Hacking
    Ethical Hacking
    Ethical Hacking
    Ethical Hacking
    Ethical Hacking
    Ethical Hacking
    Ethical Hacking
    Can you answer these queries? HDU
    Count the Colors ZOJ
    Balanced Lineup POJ
  • 原文地址:https://www.cnblogs.com/llying/p/7702113.html
Copyright © 2011-2022 走看看