所以我回到一些基础知识上,发现我在最简单的事情上遇到了麻烦。我有一个回调,引发了一个错误,我怀疑这是一个起吊的事情,但是一直在谷歌搜索并且似乎找不到我想要的东西。
function add (a,b){return a+b;}
function multiply (a,b){return a*b;}
function applyFn(callback) {
return callback;
};
var f = applyFn(add);
console.log(f); //logs => function add(a,b){return a+b;}
f(3)(4); // returns => Uncaught TypeError: f(...) is not a function(…)
我知道它var f
以未定义的值提升到顶部,而命名函数则完整地提升。当我控制台日志console.log(typeof f)
返回时,function
-我对正在发生的事情感到有些困惑...我是在正确的轨道上,还是完全不同的问题?
编辑:为更清楚起见,applyFn应该能够使用add
或multiply
函数,因此它看起来更像这样:
function add (a,b){return a+b;}
function multiply (a,b){return a*b;}
//I needed to write this function, but nothing else
function applyFn(callback) {
return function(){};
};
var f = applyFn(add);
var x = applyFn(multiply)
f(3)(4);
x(6)(8);
要回答您的问题,您需要查看applyFn
返回的结果。它需要一个函数,并简单地返回该函数。如果分配它返回的内容,则分配给它的变量现在只是对最初传入的函数的引用。在这种情况下,该函数add
就是函数,它只是将两个数字加在一起。当您调用时f
,您实际上是在调用add
,这意味着1.它需要两个参数,而2.将返回添加两个参数的结果,而不是您可以调用的另一个函数。如果您的目标是进行循环,则您的函数需要返回另一个函数,以便可以调用它:
function adder(num1) {
return function (num2) {
return num1 + num2;
};
}
adder(2)(3);
这是我认为您要寻找的:
function applyFn(func) {
return function (x) {
return function (y) {
return func(x, y);
};
};
}
applyFn的此实现应达到您期望的效果,add
并且multiply
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句