javascript,promises,如何在当时范围内访问变量

GWo*_*ing 39 javascript promise angular-promise

我希望能够调用内部的功能.那么范围,为此,我用的是this.foo()的方式.但是,如果我在内部执行此操作,那么我会收到错误,因为似乎丢失了.我能做什么?

在该代码中,这将等同于具有该对象的相同的输出

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

function one() {
  var deferred = $q.defer();
  deferred.resolve()
  return deferred.promise;
}
Run Code Online (Sandbox Code Playgroud)

这似乎都不起作用

console.log(this)
var a = this;
one().then(function(a) {
  console.log(a)
})
Run Code Online (Sandbox Code Playgroud)

And*_*ndy 51

你的第二个代码示例是正确的方法.因为范围在新函数中this发生了变化,所以也会发生变化,因此您可以this在函数外部进行引用.

失败的原因是因为函数正在使用a您传递给函数而不是a您在其外部定义的全局函数.

换一种说法:

var a = this;
one().then(function () {
  console.log(a)
});
Run Code Online (Sandbox Code Playgroud)

  • 或者......`one().then(function(){console.log(this)} .bind(this))`_usual disclaimer 9之前的互联网爆炸是浪费磁盘空间,永远不应该依赖它做显示静态网页以外的任何内容_ (36认同)
  • 是的,@ JaromandaX,我只是在查看有人对答案做出的编辑,而且代码看起来并不合适.你的看起来准确. (2认同)
  • 你的是正确的,并且在很多情况下可能更容易使用,你只需看看`var a = this`的确切位置是什么`a/this` - 然而,使用bind,它可能不是你期望的那样或者想要那件事:p (2认同)