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>

 

posted @ 2016-04-13 12:45  飞猪.net  阅读(184)  评论(0编辑  收藏  举报