promise中绑定参数的状态

时间:2015-04-28 23:58:28

标签: javascript state lifecycle page-lifecycle

我很好奇我将某些东西绑定到承诺的时间。

var that = this;
function p(){

    var promise = new Promise(
        function (yes, no) {
        /* ....  */
        /* ....  */
        }).then(function (val) {
        /* ....  */
        /* ....  */
        }.bind(this));
}.bind(this)

条件

that === this

总是返回true,考虑到promise之外的范围是异步的,.then可能会在生命周期的后期解决。

换句话说,this是否具有与调用第一个函数时相同的值,或者它是否具有.then部分实际使用的值?

2 个答案:

答案 0 :(得分:3)

this的值由调用方法中点的左侧确定。如果您没有调用对象的方法,那么this将成为全局(浏览器中的窗口)。

在您的示例中,行var that = this将该值设置为该全局变量窗口(或全局)。所以在这个特定情况下,这总是等于那个。然而,这是由于副作用,如果您使用另一个对象this,那么在

function (yes, no) {
    /* ....  */
    /* ....  */
}

this !== that

我做了一个小小的小提琴作为例子 http://jsfiddle.net/metaf0x9/

答案 1 :(得分:1)

then函数内部that === this。这是因为bind函数。

在promise函数内部,无法确定this的值是多少,但that

原因是我们不知道调用函数的上下文。此函数未绑定到that,因此我们知道它不是this对象。 this对象可以是全局的,也可以通过bindcall调用绑定到其他对象。在这种情况下,this会有所不同。