承诺中绑定参数的状态
State of a bound parameter in a promise
我很好奇我将某些东西绑定到 promise 的时机。
var that = this;
function p(){
var promise = new Promise(
function (yes, no) {
/* .... */
/* .... */
}).then(function (val) {
/* .... */
/* .... */
}.bind(this));
}.bind(this)
请问条件
that === this
总是 return 正确,考虑到 promise 之外的范围是异步的并且 .then
可能会在生命周期的后期解决。
换句话说,this
的值与调用第一个函数时的值相同,还是与 .then
部分实际使用的值相同?
this
的值由调用方法中点左边的内容决定。如果您不调用对象的方法,那么 this
将是全局的(在浏览器中为 window)。
在您的示例中,行 var that = this
将其值设置为该全局变量 window(或全局变量)。所以在这种特定情况下,这将始终等于那个。然而,这是由于副作用,如果您使用不同的对象作为 this
,那么在
function (yes, no) {
/* .... */
/* .... */
}
this !== that
我做了一个小例子fiddle
http://jsfiddle.net/metaf0x9/
then
函数内部,that === this
。这是真的,因为 bind
函数。
在 promise 函数内部,无法判断 this
的值是什么,但 不会 是 that
。
原因是我们不知道调用函数的上下文。此函数未绑定到 that
,因此我们知道它不会是 this
对象。 this
对象可以是全局对象,也可以通过 bind
或 call
调用绑定到其他对象。在那种情况下,this
会有所不同。
我很好奇我将某些东西绑定到 promise 的时机。
var that = this;
function p(){
var promise = new Promise(
function (yes, no) {
/* .... */
/* .... */
}).then(function (val) {
/* .... */
/* .... */
}.bind(this));
}.bind(this)
请问条件
that === this
总是 return 正确,考虑到 promise 之外的范围是异步的并且 .then
可能会在生命周期的后期解决。
换句话说,this
的值与调用第一个函数时的值相同,还是与 .then
部分实际使用的值相同?
this
的值由调用方法中点左边的内容决定。如果您不调用对象的方法,那么 this
将是全局的(在浏览器中为 window)。
在您的示例中,行 var that = this
将其值设置为该全局变量 window(或全局变量)。所以在这种特定情况下,这将始终等于那个。然而,这是由于副作用,如果您使用不同的对象作为 this
,那么在
function (yes, no) {
/* .... */
/* .... */
}
this !== that
我做了一个小例子fiddle http://jsfiddle.net/metaf0x9/
then
函数内部,that === this
。这是真的,因为 bind
函数。
在 promise 函数内部,无法判断 this
的值是什么,但 不会 是 that
。
原因是我们不知道调用函数的上下文。此函数未绑定到 that
,因此我们知道它不会是 this
对象。 this
对象可以是全局对象,也可以通过 bind
或 call
调用绑定到其他对象。在那种情况下,this
会有所不同。