zoukankan      html  css  js  c++  java
  • javascript闭包学习

    (function(){})()===>>>>函数会被立即执行function(){}是一个函数用括号包起来表示是函数表达式再加()表示函数自执行

     如何理解闭包?
    1、定义和用法:当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数内部的其它变量,如果返回的这个函数在外部被执行,就产生了闭包。

    2、表现形式:使函数外部能够调用函数内部定义的变量。

    3、实例如下:

    (1)、根据作用域链的规则,底层作用域没有声明的变量,会向上一级找,找到就返回,没找到就一直找,直到window的变量,没有就返回undefined。这里明显count 是函数内部的flag2 的那个count 。

    实例1:

    var count=10;   //全局作用域 标记为flag1
    function add(){
        var count=0;    //函数全局作用域 标记为flag2
        return function(){
            count+=1;   //函数的内部作用域
            alert(count);
        }
    }
    var s = add()  //这样写相当于s就是匿名函数function(){count+=1; alert(count);}
    s();//输出1
    s();//输出2

    解析:add函数的返回值是一个匿名函数,var s=add();这个时候直接输入s就会直接执行function add(){}这个函数,那么就会返回匿名函数function(){count+=1; alert(count);} 这时候再执行一下就会输出匿名函数里面的值

    s()=====>>>add()()==>alert(count)

    实例2:

    函数自我调用闭包

    var add = (function () {
        var counter = 0;
        return function () {return counter += 1;}
    })();
     
    add();
    add();
    add();
     
    // 计数器为 3

    实例解析

    变量 add 指定了函数自我调用的返回字值。

    自我调用函数只执行一次。设置计数器为 0。并返回函数表达式。

    add变量可以作为一个函数使用。非常棒的部分是它可以访问函数上一层作用域的计数器。

    这个叫作 JavaScript 闭包。它使得函数拥有私有变量变成可能。

    计数器受匿名函数的作用域保护,只能通过 add 方法修改。

  • 相关阅读:
    ThinkPHP函数详解:C方法
    ThinkPHP函数详解:A方法
    php中的中文字符串长度计算以及截取
    JQ $("#form1 :input" ).length 与 $("#form1input").length有什么区别?
    php中的isset和empty的区别与认识
    谈谈ACM带来的一些东西
    HDU 4374--F(x)
    奖学金
    数字排序
    查找数字
  • 原文地址:https://www.cnblogs.com/qdlhj/p/10615576.html
Copyright © 2011-2022 走看看