2017-04-11 103 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

相關問題