Javascript ES6 fat arrow函数参数无法理解
有人能清楚地解释在下面的代码中参数是如何传递给log函数,然后添加函数的吗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
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,这很有道理。在我的理解中,缺少的环节是高阶函数。你有没有建议多读一些关于这些的好文章?当然:是最重要的高阶函数之一。这是一个很好的起点。不过,还有很多。