JavaScript返回函数的函数

时间:2013-10-15 11:24:10

标签: javascript

我在JS上解决了一个难题,我找到了这个代码:

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

有人问到xx的价值是什么。

我已经搜索了返回函数的函数,但找不到任何有用的函数,我对返回函数的函数并不熟悉。请帮忙。

3 个答案:

答案 0 :(得分:3)

是的,它是返回函数,每次执行这个函数xx();它将返回递增的值

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

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

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

希望这能回答这个问题

答案 1 :(得分:3)

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

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

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

每次都会递增并返回e的值。您无法覆盖此变量,因为没有公开引用它。

答案 2 :(得分:1)

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

var xx =(function(){var e = 0; return function(){return e++}})();
  1. var e = 0; 将0分配给e

  2. return function(){return e++;}

    返回 f 函数:

    2.1 返回e

    的值

    2.2 增加e <1>

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

    将范围为f(){ return e++}

  4. 的函数[e=0]分配给xx
  5. xx();

    执行函数f:

    4.1 返回e // 0

    的值

    4.2 将e增加一个 // e = 1

    4.3 xx现在是功能f(){ return e++;},其范围为[e=1]

  6. 因此,xx是返回e的内部值(从 0 开始)并将e增加1的函数。

    如果您再次致电xx();,您将获得:

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