为什么箭头函数接受正文中的函数调用?

时间:2017-04-11 14:24:41

标签: javascript

这太奇怪了!我正在查看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




但事实并非如此。它产生了未定义的。有人可以解释胖箭头声明中的函数调用如何不执行并返回值?

2 个答案:

答案 0 :(得分:4)

=>的右侧是一个语句(而不是一个块)时,存在隐式return

你的函数表达式......

var done = function (a, b) { add(1,7) }

...省略了return语句。它应该是:

var done = function (a, b) { return add(1,7) }

答案 1 :(得分:1)