2017-04-11 107 views
0

这太奇怪了!我期待在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

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

回答

4

=>的右侧是一个语句(而不是一个块)时,有一个隐含的return

你的函数表达式...

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

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

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

谢谢!我似乎还不能接受。那么,在AWS示例中,done会成为一个函数,它返回具有特定参数的回调函数的执行情况? – Costa

+1

@Costa - 它通过调用名为'callback'的函数返回值 – Quentin

1
+1

“只能是一行” - JS中的行很大程度上没有意义(除非它们与ASI交互),问题中的示例有7行'=>'的权利。 – Quentin

相关问题