Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何理解这个高阶函数闭包发生了什么_Javascript_Closures_Higher Order Functions - Fatal编程技术网

Javascript 如何理解这个高阶函数闭包发生了什么

Javascript 如何理解这个高阶函数闭包发生了什么,javascript,closures,higher-order-functions,Javascript,Closures,Higher Order Functions,我知道我下面的代码是错误的,但很明显我遗漏了一些信息。我必须写出更复杂的高阶函数,但如果我不能真正理解简单的函数,我就没有机会了 add应返回所传递的两个参数的总和。很简单。。。 但鉴于我要创建这个高阶函数,必须使用闭包 hof.add=函数(add){ 函数makeAdd(a,b){ 返回加(a+b); } 返回makeAdd; }; (给出了构建在基础之上的框架) 为什么要在返回的函数中创建函数,而不是一开始就创建正确的函数?我会这样说: hof.add = function(a, b)

我知道我下面的代码是错误的,但很明显我遗漏了一些信息。我必须写出更复杂的高阶函数,但如果我不能真正理解简单的函数,我就没有机会了

add应返回所传递的两个参数的总和。很简单。。。 但鉴于我要创建这个高阶函数,必须使用闭包


hof.add=函数(add){
函数makeAdd(a,b){
返回加(a+b);
}
返回makeAdd;
};
(给出了构建在基础之上的框架)


为什么要在返回的函数中创建函数,而不是一开始就创建正确的函数?我会这样说:

hof.add = function(a, b) {
    return (a + b);
};
对于接受函数作为参数或返回另一个函数的函数,高阶函数(HOF)只是一个花哨的名称。如果我能更好地理解你,你正在尝试创建一个加法器函数,可以用来加法。使用示例hof.add是一个hof,它接收一个函数,并返回另一个可用于将两个数字相加的函数

 hof.add = function(add) {
  function addFunc(a, b) {
    return add(a, b);
  }
  return addFunc;
}

function add(a, b){
  return a + b
}

const addNumbers = hof.add(add);
addNumbers(3, 14)
//17 as answer
addNumbers can recieve any two numbers and it will add them together.

add是一个将两个数字相加的函数,该函数在hof.add中作为参数接收。add functions返回一个名为addFunc的函数,该函数依次接收两个要相加的参数。干杯

如果您只想使用一个参数名,可能您想解构它:
函数(…添加)

const not_hof={};
//通过使用解构(…添加)进行欺骗
//而不是一个HOF,因为它只接受数字作为参数
not_hof.add=函数(…add){
常量makeAdd=add.reduce((上一个,当前)=>{
返回上一个+当前;
}, 0);
return makeAdd;//仍然不是HOF,因为它返回一个数字
};
console.log(非_hof.add(2,3));//5.
console.log(非_hof.add(9,1,10));//20

console.log(非_hof.add(1,1,1,1,1,1));//6
我不太清楚你在问什么。您是想要对该代码进行解释,还是为了完成某项特定任务而对其进行修改?如果是这样,您想实现什么?最让人困惑的是代码中有三个函数,它们都被命名为
add
hof.add
add
,和
addFunc
。如果将
hof.add
重命名为
makeAdder
,将
add
参数重命名为just
callback
,可能会更容易些
返回add(a,b)
where add是组合它们的方法。“函数add应该返回传递的两个参数的总和”-哪个
add
函数?请张贴你是如何尝试调用函数的。可能重复的是这基本上是我的问题谢谢。但是,我正在与闭包和``jsfunction add(a,b){return a+b}进行斗争。你可以在原始函数中编写这个函数吗?保留它的功能,并仍然传递参数?结果证明我的问题过于复杂了。。。该睡觉了。谢谢,先生,谢谢!我会仔细检查一下,因为有很多东西需要学习!谢谢你的帮助,好心的先生。
hof.add = function(a, b) {
    return (a + b);
};
 hof.add = function(add) {
  function addFunc(a, b) {
    return add(a, b);
  }
  return addFunc;
}

function add(a, b){
  return a + b
}

const addNumbers = hof.add(add);
addNumbers(3, 14)
//17 as answer
addNumbers can recieve any two numbers and it will add them together.