Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.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 ES6 fat arrow函数参数无法理解_Javascript_Callback_Ecmascript 6 - Fatal编程技术网

Javascript ES6 fat arrow函数参数无法理解

Javascript ES6 fat arrow函数参数无法理解,javascript,callback,ecmascript-6,Javascript,Callback,Ecmascript 6,有人能清楚地解释在下面的代码中参数是如何传递给log函数,然后添加函数的吗 const add = (x,y) => console.log(x+y); const log = func => (...args) => { console.log(...args); func(...args); } const logadd = log(add); logadd(1,2,3); // 3 //1,2,3 我知道上面的代码也可以写如下 const add = fun

有人能清楚地解释在下面的代码中参数是如何传递给log函数,然后添加函数的吗

const add = (x,y) => console.log(x+y);

const log = func => (...args) => {
  console.log(...args);
  func(...args);
}

const logadd = log(add);
logadd(1,2,3); // 3 //1,2,3
我知道上面的代码也可以写如下

const add = function(x,y) {
  console.log(x,y);
}

const log = function(func){
   return function(...args){
    console.log(...args);
    func(...args)
  }       
}

const logadd=log(add);
logadd(1,2,3); // 3 //1,2,3

如果logadd是函数变量,并且如果我将其传递给参数,那么参数是如何传递给的,首先是log函数,然后是to add函数?有什么好文章可以解释这一点,或者有人能解释一下吗?

首先,箭头函数被称为箭头函数——它们既不胖也不瘦

在func=>…args中,args参数用作rest参数,由。。。收集示例中数组[1,2,3]中的所有给定参数。使用console.log…args扩展语法。。。用于将console.log方法应用于args数组的所有元素。请注意…的含义。。。语法因上下文而异

func…args的计算结果为func1,2,3。因为func表示add,所以它放弃第三个参数


log是一个高阶函数,即以另一个函数为参数的函数。这与咖喱无关,尽管咖喱有助于使用高阶函数。但是,log在其第一个参数中部分适用。

提示:Currying function,spread operator如果您理解了底部变量,那么理解顶部变量很简单:func=>\uuuuuuuuuu主要等效于function func{{uuuuuuuuu},而…args=>\uuuuuuuuuuu主要等效于function…args{uuuuuuuu}。通过这些替换,这两个代码块实际上是彼此的复制粘贴。嗨@Amadan,我理解你所解释的内容,只有这样,我写的第一个代码块与第二个代码块相同。然而,我不明白的是,args是如何神奇地传递给内部函数的?@Rajesh谢谢,我将研究Currying函数。我不知道为什么这个问题被否决了?有人愿意解释一下吗?谢谢@ftor,这很有道理。在我的理解中,缺少的环节是高阶函数。你有没有建议多读一些关于这些的好文章?当然:是最重要的高阶函数之一。这是一个很好的起点。不过,还有很多。