javascript:closures,匿名函数,iife

时间:2016-09-03 18:09:38

标签: closures anonymous-function iife lexical-scope

一位朋友让我设计一个执行以下操作的功能:f1()()()()(0) 应该输出为4. f1()(0)应该输出为1.它是传递0之前的括号数。我仔细搜索了应该怎么做。有一些概念串起来:像IIFE,匿名函数和词法范围。这是否使用了应该知道的更高级的javascript概念功能? Here is the image of what needs to be done

1 个答案:

答案 0 :(得分:0)

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

我更愿意调用函数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