web-dev-qa-db-de.com

Javascript, verspricht, wie man auf diese Variable innerhalb eines damaligen Gültigkeitsbereichs zugreift

Ich möchte in der Lage sein, eine Funktion innerhalb des . Then Bereichs aufzurufen, und dafür verwende ich das this. foo () Weise. Aber wenn ich das innerhalb der . Dann bekomme ich eine Fehlermeldung, da diese scheint verloren zu sein. Was kann ich tun?

In diesem Code wäre dies gleichbedeutend mit der gleichen Ausgabe für das Objekt . This

console.log(this)
one().then(function() {
  console.log(this)
})

function one() {
  var deferred = $q.defer();
  deferred.resolve()
  return deferred.promise;
}

Dies scheint auch nicht zu funktionieren

console.log(this)
var a = this;
one().then(function(a) {
  console.log(a)
})
34
GWorking

Ihr zweites Codebeispiel ist der richtige Weg. Da sich der Gültigkeitsbereich in der neuen Funktion ändert, ändert sich auch this, sodass Sie zu Recht einen Verweis auf this außerhalb der Funktion erstellen können.

Der Grund dafür ist, dass die Funktion a verwendet, das Sie an die Funktion übergeben haben, und nicht an das globale a, das Sie außerhalb der Funktion definiert haben.

Mit anderen Worten:

var a = this;
one().then(function () {
  console.log(a)
});
46
Andy