JavaScript返回函数的函数

JavaScript Functions that return function

本问题已经有最佳答案,请猛点这里访问。

我在解决JS上的一个难题时发现了以下代码:

1
2
3
4
var xx = (function () {
    var e = 0;
    return function () { return e++ }
})();

有人问XX的价值是多少。

我在google上搜索过返回函数的函数,但找不到任何有用的东西,我对返回函数的函数不太熟悉。请帮忙。


在JavaScript中,函数是第一类对象;也就是说,它们可以像其他任何东西一样传递和分配给变量。所以在您的例子中,xx只是对内部函数的引用,可以调用、传递等。

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

1
2
3
xx();
xx();
xx();

每次增加并返回e的值。您不能重写这个变量,因为没有对它的公共引用。


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

alert( xx() );//将报警0

alert( xx() );//将报警1

alert( xx() );//将报警2

希望这能回答这个问题


让我们将这些语句分解为其组成部分:

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

  • 江户十一〔七〕号将0分配给E

  • 埃多克斯1〔8〕

    返回函数f,其中:

    2.1返回e的值

    2.2将e增加1

  • 埃多克斯1〔9〕

    为xx分配作用域为[e=0]的函数f(){ return e++}

  • 埃多克斯1〔12〕

    执行功能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();,你会得到:

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