【发布时间】:2020-02-13 23:22:36
【问题描述】:
我目前正在学习 Javascript 基础知识,尤其是高阶函数。我阅读了许多文章并观看了许多视频,其中人们解释了基本定义并演示了高阶函数的最基本构造。但是,当我遇到实际问题时,我迷路了。这是一个例子(这只是为了我的个人学习,不是为了成绩或工作):
编写一个maybe函数,给定一个谓词(一个返回布尔值的函数)和任何其他函数,如果前者返回true,则只调用后者:maybe(x => x > 100, myFn)。如果谓词返回 true,则应将 x 的值传递给 myFn。如果谓词返回 false,x 应该原样返回。
我不明白如何将 x 的值从一个函数传递给另一个函数...
除了谓词函数和回调函数之外,我还通过添加一个数字参数来解决这个问题。但是,提示中只指定了两个参数,所以我想我没有正确执行。这是我所做的:
//predicate (evaluates to a boolean)
const notZero = function(x) {
//console.log('predicate runs!');
return x !== 0;
}
//callback (does something within the main function)
const plusOne = function(x) {
//console.log('callback runs!');
return x + 1;
}
//checking if my predicate works
//test(notZero(1), true); // => test passed!
//another callback
const myFn = function(x) {
return x - 100;
}
//main function
function maybe(number, predicate, callback) {
if (predicate(number) === true) {
//console.log('predicate === true');
//console.log(callback(number));
return callback(number);
} else {
return number;
}
}
test(maybe(1, notZero, plusOne), 2);
test(maybe(0, notZero, plusOne), 0);
test(maybe(101, x => x > 100, myFn), 1);
test(maybe(99, x => x > 100, myFn), 99);
编辑:如下所述,maybe 现在只能接受 2 个参数(谓词和回调),因为它现在返回一个参数为 number 的函数。这就是我一直在寻找的想法。
function maybe(predicate, callback) {
return function (number) {
if (predicate(number) === true) {
return callback(number);
} else {
return number;
}
}
}
【问题讨论】:
-
我不明白。你的代码看起来不错。问题出在哪里?
-
Maaz,提示只指定了2个参数(谓词和回调)。是的,我的测试通过了,但我担心不添加数字参数就可以解决这个问题……我不知道在这种情况下如何解决。
-
你打算如何将数字传递给谓词?
-
谢谢,我意识到我需要立即返回一个以数字为参数的函数,而不是在可能的参数列表中包含数字。
标签: javascript callback higher-order-functions