在函数返回之前访问自己的对象属性

时间:2018-02-13 08:02:08

标签: javascript reactivex

在下面的代码中,forEach循环运行的匿名函数能够在subscription.dispose()将订阅对象返回到第一次运行之前调用buttonClicks.forEach(..)subscription变量。

forEach(..)完成至少运行一次之前,forEach如何能够访问它返回的对象?

function(button) {
    var buttonClicks = Observable.fromEvent(button, "click");

    // In the case of an Observable, forEach returns a subscription object.
    var subscription =
        buttonClicks.
            forEach(function(clickEvent) {
                alert("Button was clicked. Stopping Traversal.");

                // Stop traversing the button clicks
                subscription.dispose();
            });
}

1 个答案:

答案 0 :(得分:1)

已声明变量subscription

它会在forEach返回后初始化,在此之前,它是undefined

所以点击处理程序可以引用该变量。它不能做的实际上是调用dispose,因为它需要该变量来保存一个值(但是这会在有人点击之前发生,到那时forEach已经很久才返回并且变量指定)。

请注意,Observable#forEach不会立即运行您传递的功能(与Array#forEach不同)。每次observable发出一个值时,都会运行该函数(此处:发生了一次点击)。

另请注意,您稍后可以将subscription分配给其他内容,并会在其上调用dispose。它并不真正与forEach返回的对象绑定。点击处理程序将继续引用变量,而不是在创建变量时引用变量的