2017-04-11 10 views
0

Das ist so seltsam! Ich betrachte AWS Lambda Beispielcode, und sie haben eine seltsame ES6 Erklärung für ihre Rückrufe:Warum akzeptieren Pfeilfunktionen Funktionsaufrufe im Körper?

const done = (err, res) => callback(null, { 
    statusCode: err ? '400' : '200', 
    body: err ? err.message : JSON.stringify(res), 
    headers: { 
     'Content-Type': 'application/json', 
    }, 
}); 

Also, ich mein eigenes vereinfachtes Beispiel, um zu versuchen einen Sinn dieser Erklärung zu machen.

function add (x, y) { 
 
    return x + y 
 
} 
 

 
var done = (a, b) => add(1,7) 
 

 
console.log(done(1,2)) // 8

Der obige Code logs 8 am Ende. Ich dachte, es wäre das Äquivalent sein:

function add (x, y) { 
 
    return x + y 
 
} 
 

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

 
console.log(done(1,2)) // undefined

Aber es ist nicht. Es produzierte undefiniert. Kann jemand erklären, wie der Funktionsaufruf in der Fettpfeil-Deklaration nicht nur ausgeführt und zurückgegeben wird?

Antwort

4

Wenn die rechte Seite der => eine Anweisung ist (anstelle eines Blocks), gibt es eine implizite return.

Ihre Funktion Ausdruck ...

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

... auslässt, dass return-Anweisung. Es sollte sein:

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

Dank! Ich kann es noch nicht akzeptieren. Im AWS-Beispiel wird done zu einer Funktion, die die Ausführung der Callback-Funktion mit bestimmten Parametern zurückgibt. – Costa

+1

@Costa - Es gibt den Wert, der durch Aufrufen der Funktion namens "Callback" – Quentin

1
+1

erhalten wurde, kann nur eine Zeile sein "- Zeilen sind weitgehend bedeutungslos in JS (außer wenn sie mit ASI interagieren), das Beispiel in der Frage hat 7 Zeilen zu das Recht des '=>'. – Quentin

Verwandte Themen