如何将多参数匿名立即执行函数转为箭头函数?为何改写后返回NaN
问题原因
首先你的原始写法是立即调用函数表达式(IIFE):匿名函数定义完成后立刻传入参数1和2执行,变量x拿到的是函数执行后的返回值,所以结果为3。
你改写的箭头函数存在两个核心问题:
- 你当前的写法完全没有调用逻辑,变量
x实际被赋值为箭头函数本身,而非函数执行后的返回值。当你把函数类型当做数值使用时,就会得到NaN的结果。 - 箭头函数不能直接在定义末尾加括号实现立即调用,受JS运算符优先级限制,直接写
(y,z) => y+z(1,2)会被JS解析为「返回y + z(1,2)的箭头函数」,即把参数z当做函数调用,自然无法得到预期的数值结果。
正确写法
如果要实现和原始代码等价的箭头函数IIFE,需要先把整个箭头函数用括号包裹,再执行调用:
// 和原始代码逻辑完全一致,调用时传参 let x = ((y, z) => { return y + z })(1, 2); // 如果你想用参数默认值,调用时不需要传参 let x = ((y = 1, z = 2) => { return y + z })();
上述两种写法执行后,x的结果都是3。
内容的提问来源于stack exchange,提问作者JSNinja
相关产品推荐
相关产品推荐

