ES6箭头函数返回值的两种写法:差异何在?哪种更规范?
ES6箭头函数两种返回值写法的差异与规范
核心差异
先拆解两种写法的本质:
- 第一种写法的
value是一个待调用的函数:
let value = (myValue => { if(random_value > 50) { myValue("Bigger than 50"); } else { myValue("Smaller than 50"); } });
它本身不直接返回判断结果,而是接收一个回调函数myValue,只有当你调用value(某个回调)时,才会把判断结果传给回调执行。此时value存储的是函数,不是你想要的字符串。
- 第二种写法的
value_2是立即执行函数的返回结果:
let value_2 = (() => { if(random_value > 50) { return "Bigger than 50" } else { return "Smaller than 50" } })();
这是立即执行函数表达式(IIFE)——箭头函数定义后立刻被()执行,内部的return直接把判断后的字符串返回,value_2最终存储的就是这个字符串结果。
哪种更规范?
取决于你的需求:
- 如果你只是想直接拿到
random_value的判断字符串,第二种写法完全贴合需求,是规范的,它的意图清晰,代码阅读者一眼就能懂value_2是最终计算值。 - 第一种写法只有在需要延迟执行逻辑、通过回调处理结果的场景下才有意义,但这种情况应该给函数起个明确的名字(比如
handleRandomValue),而不是用value这种模糊变量名。另外你的示例里第一种写法其实没完成“获取返回值”的目的,因为你只是定义了函数没调用,value还是个函数,不是结果。
为什么两种方式都能生效?
- 第一种写法生效是因为JavaScript中函数是一等公民,可以被赋值给变量。你定义了一个接收回调的箭头函数,把它赋值给
value后,这个变量就成了可调用的函数,传入回调后就能触发内部逻辑传递结果。 - 第二种写法生效是因为IIFE是JavaScript的合法语法:用
()包裹函数表达式,后面紧跟()会立刻执行该函数,函数的return值会被赋值给value_2,这是利用了函数的执行与返回值特性。
内容的提问来源于stack exchange,提问作者rusty_vibess
相关产品推荐
相关产品推荐

