JS高阶函数参数疑问:实参(3,2,1)如何绑定到箭头函数?
问题解答
咱们一步步拆解代码的执行流程,就能搞懂参数是怎么传递的:
第一步:执行
noisy(Math.min)
调用noisy函数时,Math.min被传给了函数的形参f。noisy内部会返回一个箭头函数:(...args) => {...}。这个箭头函数会通过闭包“记住”外部的f(也就是Math.min)。第二步:执行
(3, 2, 1)
这其实是调用刚才noisy返回的箭头函数,把3、2、1作为实参传进去。箭头函数的形参...args是JS的剩余参数语法,它会自动把所有传入的实参打包成一个数组,赋值给args变量。这一步是JS函数调用机制自动完成的,不需要你写显式赋值代码,此时args的值就是[3, 2, 1]。第三步:箭头函数内部执行
f(...args)
这里的f是之前传入的Math.min,而...args是展开运算符,它会把数组args里的元素逐个展开,传给Math.min,相当于执行Math.min(3, 2, 1),最终得到结果1。
简单说:noisy(Math.min)返回一个箭头函数,后面的(3,2,1)就是调用这个箭头函数,JS自动把这些实参打包给箭头函数的...args形参,所以不用写显式赋值语句。
内容的提问来源于stack exchange,提问作者arthur
相关产品推荐
相关产品推荐

