【问题标题】:JavaScript Functions that return function [duplicate]返回函数的JavaScript函数[重复]
【发布时间】:2013-10-23 04:29:00
【问题描述】:

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

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

有人问xx的值是多少。

我搜索了有关返回函数的函数,但找不到任何有用的信息,我对返回函数的函数不太熟悉。请帮忙。

【问题讨论】:

  • 这是您要寻找的答案吗? stackoverflow.com/questions/7629891/…
  • @Eduardo 帮助解释返回函数的函数以及 xx 的值
  • @VisioN 我不认为这两个是同一个问题先生 :)
  • xx 的值将是一个函数,它返回 e 的值并在每次调用时递增。
  • 这只是一个关闭的例子

标签: javascript


【解决方案1】:

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

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

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

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

希望这能回答问题

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      让我们分解其组成部分中的语句:

      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++}})();

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

      4. xx();

        执行函数 f:

        4.1 返回e的值 // 0

        4.2 将 e 加一 // e = 1

        4.3 xx 现在是函数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
      

      【讨论】:

      • 非常感谢您的详细解释。您能否参考任何书籍或链接,以便我可以更深入地了解这一点。 :)
      • 我使用了在 uni 学习的 ComputabilitySemantic of Programming Languages 方面的知识。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 2013-06-26
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      相关资源
      最近更新 更多