JavaScript函数返回函数

这个问题在这里已经有了答案:

  • JavaScript关闭如何工作? 88个答案
  • 为什么你需要在同一行上调用匿名函数? 19个答案

  • 让我们分解其成​​分中的陈述:

    var xx =(function(){var e = 0; return function(){return e++}})();
    
  • var e = 0; 给e赋0

  • return function(){return e++;}

    返回一个函数f ,其中:

    2.1返回e的值

    2.2将e增加1

  • var xx = function(){var e = 0; return function(){return e++}})();

    用范围[e=0]赋给xx函数f(){ return e++}

  • xx();

    执行函数f:

    4.1返回e // 0的值

    4.2将e递增1 // e = 1

    4.3 xx现在是函数f(){ return e++; }范围[e=1]

  • 所以, xx是返回e的内部值(从0开始)并将e递增1的函数。

    如果你调用xx(); 另一次,你会得到:

    xx(); // returns 1
    xx = f(){ return e++;}[e=2] // returns 2 and increment e by one
    

    是的,它是返回函数,并且每次你执行这个函数xx(); 它会返回一个递增的值

    alert( xx() ); //将提醒0

    alert( xx() ); //会提醒1

    alert( xx() ); //会提醒2

    希望这回答这个问题


    在JavaScript中,函数是一流的对象; 也就是说,它们可以被传递并分配给其他任何变量。 所以在你的情况下, xx只是对内部函数的引用,它可以被调用,进一步传递等等。

    这样做的一个好处是你可以像你的例子那样实现私有变量。 通过在外部函数中定义e ,并在内部函数内引用它,内部函数即使在返回后仍保留对e引用。 这可以让你打电话

    xx();
    xx();
    xx();
    

    这会每次递增并返回e的值。 由于没有公开引用,因此无法覆盖此变量。

    链接地址: http://www.djcxy.com/p/1485.html

    上一篇: JavaScript Functions that return function

    下一篇: Node.js JavaScript syntax