• JavaScript学习(四) 闭包


    function add() 
    {
        var counter = 0;
        return counter += 1;
    }
     
    add();
    add();
    var x = add();  //结果为1

    每次调用add函数都将counter清零了 


    var add = (function () 
    {
        var counter = 0;
        return function () {return counter += 1;}
    })();
     
    add();
    add();
    var x = add(); //结果为3

    上述写法相当于:

    function add1()    //该函数返回一个函数,有点像C#的委托
    {
        var counter = 0;
        return function () {return counter += 1;}
    }
    
    var add = add1();  //执行add1函数,这时add就表示add1返回的函数
     
    add();
    add();
    var x = add(); //结果为3  执行3次相当于在同一个对象上

    闭包

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

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

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

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

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

    Note

    闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰。

    直观的说就是形成一个不销毁的栈环境。


    PS:如果这样写就不一样了:

    function add1()    //该函数返回一个函数,有点像C#的委托
    {
        var counter = 0;
        return function () {return counter += 1;}
    }
    
    add1()();
    add1()();
    var x = add1()(); //结果为1  虽然也执行了3次,但是不是作用于同一对象上相当于还是执行了这一次
  • 相关阅读:
    四月⑨日
    4月⑦日
    4月6日
    四月⑧日
    第一天上课
    modelsim的do文件
    SCCB协议
    FPGA之VGA控制
    FPGA常用术语
    乘法器之六(硬件乘法器)
  • 原文地址:https://www.cnblogs.com/bridgew/p/16138060.html
Copyright © 2020-2023  润新知