3

我正在解决一个关于 JS 的难题,我发现了这段代码:

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

有人问xx的值是多少。

我用谷歌搜索了返回函数的函数,但找不到任何有用的东西,我对返回函数的函数不太熟悉。请帮忙。

4

3 回答 3

3

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

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

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

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

希望这能回答问题

于 2013-10-15T11:29:22.120 回答
3

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

这样做的一个好处是您可以像示例中那样实现私有变量。通过e在外部函数内部定义,并在内部函数内部引用它,内部函数e即使在返回之后也会保留该引用。这允许您调用

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

这将增加并返回e每次的值。你不能覆盖这个变量,因为它没有公共引用。

于 2013-10-15T11:33:50.960 回答
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++}将具有作用域的函数分配给 xx[e=0]

  4. xx();

    执行函数 f:

    4.1返回e的值// 0

    4.2 e 加一// e = 1

    4.3xx现在是f(){ return e++;具有作用域的函数 }[e=1]

因此,xx是返回e(从0开始)的内部值并加e一的函数。

如果你再打电话xx();,你会得到:

xx(); // returns 1
xx = f(){ return e++;}[e=2] // returns 2 and increment e by one
于 2013-10-15T12:04:39.510 回答