2016-06-27 7 views
1

Wenn ich Code wie folgt:Mit einem Javascript-Versprechen, wie man über lokale Variablen zum übergeordneten Bereich in einem `dann` schließt?

Blog.add = function(account) { 
    const url = 'http://fetchdata.com'; 
    response = HTTP.post(url); 

    response.then(function(response) { 
    // There is no access to account or url here. 
    }); 
}; 

Als ich in der then Schließung brechen, ich sehe, dass this auf das globale Objekt gebunden ist, die mir fremd zu sein scheint. Sollte es nicht an die add Funktion gebunden sein ?. Ich habe Pfeilfunktionen mit dem gleichen Ergebnis versucht. Ich verstehe definitiv nicht, was hier vorgeht ...

+2

Aber es gibt * Zugang zu "account" und "url" in dieser Funktion. Nicht über 'dies ', da dies nur einfache In-Scope-Variablen sind. – Pointy

+1

Sie haben var, let oder const nicht verwendet, um die Antwort zu deklarieren. Das macht es zu einer globalen Variable, oder? –

+0

@RobLouie guten Fang, aber es ist auch wirklich wichtig zu sehen, wie Blog.add() aufgerufen wurde. Außerdem haben wir jetzt schon Erklärungen hier. – Rohit416

Antwort

1

Sie haben hier mehrere Fragen. Ich werde versuchen, sie zu beantworten:

  1. Sie sollten in der Lage ohne Probleme über account innerhalb des Versprechen Rückruf zu schließen. Wenn Sie es nicht sehen, wenn Sie einen Haltepunkt treffen, liegt es einfach daran, dass es noch nicht in Ihrem Code verwendet wird (der Debugger wird nicht dynamisch darüber geschlossen, Sie müssen über Code verfügen, der es für die Erfassung verwendet).

  2. this gebunden werden jedoch die Promise-Implementierung implementiert ist.

  3. In Ihrem Fall sehen wir nicht genug des Codes, um zu wissen, was this sein könnte. Alles hängt davon ab, wie Blog.add tatsächlich aufgerufen wird. Wenn die lexikalische Bindung über => Ihnen immer noch den globalen Namensraum gibt, dann gibt es ein "Problem" mit Ihrem Anruf.

+0

"der Debugger wird nicht dynamisch darüber schließen, Sie müssen Code haben, der es verwendet, um es zu erfassen" - vielen Dank für die Erklärung – guptron

4

Die Situation in Ihrem Code hat nichts mit this zu tun. Es ist ein Fall von einfachem lexikalischem Umfang. Innerhalb des Rückrufs, den Sie an .then() übergeben, sind alle lokalen Variablen in der umschließenden Funktion (.add()-Methode) sichtbar, einschließlich account und url. Sie sind direkt sichtbar — this ist Figur nicht hinein:

response.then(function(response) { 
    console.log(url); 
    console.log(account); 
    });