zoukankan      html  css  js  c++  java
  • js 闭包

    概念:作用域

    全局变量和局部变量。函数内部可以使用全局变量,js的链式作用域结构

    闭包就是能够读取其他函数内部变量的函数

    1 可以在读取函数内部的局部变量

    <script>
            function f1()
            {
                var n = 999;
                function f2()
                {
                    var n = 2016;
                    alert(n);
                }
                return f2;
            }
            var result = f1();
            result();
        </script>

    2 让变量始终保持在内存中

      <script>
            function f1()
            {
                var n = 999;
                nadd=function()
                {
                    n + 1;
                }
                function f2()
                {
                    alert(n);
                }
                return f2;
            }
            var result = f1();
            result();
            nadd();
            result();
        </script>

    运行结果第一次999,第二次1000;在调用方法后,变量的值并没有消失;原因:f2 被赋给一个全局变量,f2始终在内存中 ,而f2依赖f1,所以f1也始终在内存中

    闭包的注意点

    闭包保存在内存中,对内存的消耗很大,避免过度使用闭包,IE导致内存泄露,在退出函数前清除局部变量

    闭包会在父函数外部,改变父函数内部变量的值

    测试如下的运行结果

     <script>
            var name = "The Window";
            var object = {
                name: "My Object",
                getNameFunc: function () {
                    return function () {
                    return this.name;
                    };
                }
            };
            alert(object.getNameFunc()());  //The Window
        </script>
  • 相关阅读:
    BZOJ3615 : MSS
    BZOJ3468 : 滑雪
    BZOJ3515 : EvenPaths
    BZOJ3161 : 孤舟蓑笠翁
    BZOJ2652 : 三角板
    BZOJ2646 : neerc2011 flight
    BZOJ3567 : AABB
    HDU5823 : color II
    BZOJ1946 : [Ceoi2006]ANTENNA
    BZOJ4644 : 经典傻逼题
  • 原文地址:https://www.cnblogs.com/dh2014/p/5386711.html
Copyright © 2011-2022 走看看