承诺中绑定参数的状态

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 对象可以是全局对象,也可以通过 bindcall 调用绑定到其他对象。在那种情况下,this 会有所不同。