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