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

    一、闭包

    闭包:如果一个函数访问了它的外部变量,那么它就是一个闭包

    特点:1是函数。  2.该函数有权访问另一个函数作用域内的变量 。


    二、举例

     

          function foo(x) {
                    var tmp = 3;
                    return function (y) {
                        alert(x + y + (++tmp));
                    }
                }
                var bar = foo(2); // bar 现在是一个闭包
                bar(10); //16
                bar(10);//17
                bar(10);//18
    

    理解如:

         function foo(x) {
                    var tmp = 3;
                    this.Fun= function (y) {
                        alert(x + y + (++tmp));
                    }
                }
                var bar = new foo(2); // bar 现在是一个闭包
                bar.Fun(10); //16
                bar.Fun(10);//17
                bar.Fun(10);//18
    

    三、闭包陷阱:

      function createFunctions() {
                    var result = new Array();
                    for (var i = 0; i < 10; i++) {
                        result[i] = function () {
                             return i;
                        };
                    }
                    return result;
       }
        var funcs = createFunctions();
                for (var i = 0; i < funcs.length; i++) {
                    console.log(funcs[i]()); //执行结果:10次都是10
                }
    

     注意:

    定义函数:没执行函数,函数内部不变,不能将函数内的i替换!

    result[0] = function(){ return i; }; 

    result[1] = function(){ return i; };

    .....

    数组funcs的每一个元素funcs[i]都是闭包

    修改如:

    function createFunction(){
        var result=new Array();
        for(var i=0;i<10;i++){
            result[i]=function(m){
                            return function(){
                                return m;
                            };
                        }(i); // result[i]是闭包
        }
        return result;
    }
     
    var arr = createFunction();
    for (var j = 0; j < arr.length; j++) {
        console.log(arr[j]());
    }

    四、参考

    深入理解javascript原型和闭包(15)——闭包

    https://www.cnblogs.com/wangfupeng1988/p/3994065.html

  • 相关阅读:
    aspx有"记住我"的登录
    Aspx比较简单的登录
    内容显示分页数字分页 aspx
    Ashx登录
    Aspx 验证码_各种封装
    IsPostBack的使用
    Ashx增删改查_动软
    一般处理程序ashx
    dispatch_after
    pch文件的作用
  • 原文地址:https://www.cnblogs.com/July-/p/9541388.html
Copyright © 2011-2022 走看看