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>
  • 相关阅读:
    [Violet]蒲公英
    CF535-Div3
    逛公园
    exgcd
    线段树套线段树
    Luogu P2730 魔板 Magic Squares
    fhqtreap
    AtCoder Beginner Contest 115
    关于这个博客
    智障错误盘点
  • 原文地址:https://www.cnblogs.com/dh2014/p/5386711.html
Copyright © 2011-2022 走看看