这太奇怪了!我正在查看AWS Lambda示例代码,他们为回调做了一个奇怪的ES6声明:
const done = (err, res) => callback(null, {
statusCode: err ? '400' : '200',
body: err ? err.message : JSON.stringify(res),
headers: {
'Content-Type': 'application/json',
},
});
所以,我制作了自己的简化示例,试图弄清楚这个声明。
function add (x, y) {
return x + y
}
var done = (a, b) => add(1,7)
console.log(done(1,2)) // 8

上面的代码最后记录了8。我认为这相当于:
function add (x, y) {
return x + y
}
var done = function (a, b) { add(1,7) }
console.log(done(1,2)) // undefined

但事实并非如此。它产生了未定义的。有人可以解释胖箭头声明中的函数调用如何不执行并返回值?
答案 0 :(得分:4)
当=>
的右侧是一个语句(而不是一个块)时,存在隐式return
。
你的函数表达式......
var done = function (a, b) { add(1,7) }
...省略了return语句。它应该是:
var done = function (a, b) { return add(1,7) }
答案 1 :(得分:1)
return
没有大括号的箭头函数只能是一行,并会自动返回。