• 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 方法修改。

  • 相关阅读:
    SQLServer2008新建链接服务器for Oracle
    提示Can't load package:dclite70.bpl解决方法
    android实现自动升级并安装打开
    【转】Ubuntu 14.04.3上配置并成功编译Android 6.0 r1源码
    Android日志打印类LogUtils,能够定位到类名,方法名以及出现错误的行数并保存日志文件
    Linux 自定义命令
    CentOS时间的查看与修改
    Linux expect自动登录ssh,ftp
    ★Linux命令行操作技巧(作为服务器端)
    ★Linux桌面系统技巧(作为客户端)
  • 原文地址:https://www.cnblogs.com/qdlhj/p/10615576.html
Copyright © 2020-2023  润新知