函数返回异常是否因大括号?箭头函数大括号为何返回undefined?
关于箭头函数大括号与返回值的问题解答
嘿,我来帮你把这两个疑惑掰扯清楚~
疑问1:函数是否仅因为大括号的存在就返回错误结果?
并不是“大括号本身导致错误结果”,而是箭头函数的两种语法规则在起作用:
- 当箭头函数使用简洁体(没有大括号)时,会自动返回箭头右侧表达式的结果,比如你写的
m=>m>n,相当于m=>{ return m>n; }。 - 当箭头函数使用块体(有大括号)时,必须显式通过
return语句指定返回值,否则函数会默认返回undefined。
看你的示例代码:
function greater(n){ return (m)=>{m>n}; }
这里箭头函数用了大括号形成块体,里面只执行了m>n这个比较表达式,但没有把结果return出去,所以调用greater(10)(11)时,箭头函数没有返回值,最终得到undefined。
而第二个函数:
function great(n){ return m=>m>n; }
箭头函数用了简洁体,自动返回m>n的比较结果,所以great(10)(11)会返回true。
疑问2:为何箭头函数外层的大括号会在条件成立时返回undefined?
原因和上面说的一致——块体语法下的箭头函数需要显式return。
你可以把箭头函数的块体理解成普通函数的函数体:比如普通函数里如果只写了一个表达式但不return,那函数执行完就返回undefined。箭头函数的块体也是一样的逻辑:
// 普通函数类比 function compare(m, n) { m > n; // 只是执行表达式,没有return } compare(11, 10); // 返回undefined
你的箭头函数(m)=>{m>n}就和这个普通函数的逻辑一样,虽然11>10的结果是true,但这个结果没有被return出去,所以函数最终返回undefined。如果改成(m)=>{ return m>n; },就能得到预期的true了。
测试验证:
greater(10)(11)→undefinedgreat(10)(11)→true
内容的提问来源于stack exchange,提问作者Arjon Cahani
相关产品推荐
相关产品推荐

