• 闭包


    好难啊!

    虽然感觉懂了,但是又感觉不懂……

    什么时候使用闭包: 只要重用一个变量,又保护变量不被污染时

    步骤: 3步:

     1. 用外层函数包裹要保护的变量和操作变量的函数

     2. 外层函数将内层函数的对象返回到外部

     3. 使用者调用外层函数,获得内层函数对象

    闭包的形成原因: 外层函数的作用域对象(AO)无法释放

      被内层函数对象引用着

    简图: 2步:

     1. 找受保护的变量,并确定其最终值

     2. 找使用变量的内层函数对象,只有内层函数才能使用受保护的变量

    闭包缺点: 比普通函数占用更多内存空间!

      解决: 闭包不再使用,要及时释放

        如何释放: 将引用内层函数对象的变量赋值为null

    <script>
    //1、用外层函数包裹要保护的变量和内层函数
    function outer(){
    var i = 1;//保护
    //2、外层函数将内层函数返回到外部
    return function(){//使用变量的函数
    console.log(i++);
    }
    }
    //3、使用者调用外层函数获得内层函数的对象
    var getNum = outer();
    //getNum:function(){console.log(i++); }
    //i本该被释放!
    getNum();//1
    getNum();//2
    i = 1;//全局变量改不了局部i,即局部i被保护
    getNum();//3
    getNum();//4
    </script>

    <script>
    function fun(){
    var n = 999;
    nAdd = function(){n++;}
    return function(){
    console.log(n);
    }
    }
    var get = fun();
    //get:function(){console.log(n);}
    get();//999
    nAdd();
    get();//1000
    </script>

  • 相关阅读:
    HTML5---offline application(application cache)
    apache asp.net
    长轮询
    comet ajax轮询
    bootstrap3
    weixin
    backbone csdn
    backbone case
    backbone showcase
    javascript performance
  • 原文地址:https://www.cnblogs.com/wangruifang/p/7376680.html
Copyright © 2020-2023  润新知