【问题标题】:javascript: closures, anonymous functions, iifejavascript:闭包、匿名函数、iife
【发布时间】:2017-01-11 14:32:43
【问题描述】:

一位朋友让我设计一个执行以下操作的函数:f1()()()()(0) 应该给出输出为 4。f1()(0) 应该给出输出为 1。它是传递 0 之前前括号的数量。我彻底搜索了应该如何做。将一些概念串联起来:如 IIFE、匿名函数和词法作用域。这是否使用了应该知道的更高级的javascript概念函数? Here is the image of what needs to be done

【问题讨论】:

    标签: closures anonymous-function iife lexical-scope


    【解决方案1】:

    没有高级概念。你只需要知道如何从另一个函数返回一个函数。


    我更愿意调用函数f0,因为f0(0) 显然应该返回0。然后我们可以想象所有这些类型的函数返回它们的括号级别——例如,f42(0) 返回42

    当不带参数调用时,f0() 应该返回f1,所以f0()(0)1,以此类推。这很容易做到:

    function f0(x) {
      return (x === 0) ? 0 : f1(x);
    }
    

    显然,我们不想写出无数这样的函数。让我们创建一个函数工厂,它会根据需要自动构建它们:

    function factory(level) {
      function f_level(x) {
        return (x === 0) ? level : factory(level + 1);
      }
      return f_level;
    }
    

    工厂总是返回一个函数,factory(0) 正是你想要的函数f0

    【讨论】:

      猜你喜欢
      • 2015-02-19
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多