在下面的代码中,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();
});
}
答案 0 :(得分:1)
已声明变量subscription
。
它会在forEach
返回后初始化,在此之前,它是undefined
。
所以点击处理程序可以引用该变量。它不能做的实际上是调用dispose
,因为它需要该变量来保存一个值(但是这会在有人点击之前发生,到那时forEach
已经很久才返回并且变量指定)。
请注意,Observable#forEach
不会立即运行您传递的功能(与Array#forEach
不同)。每次observable发出一个值时,都会运行该函数(此处:发生了一次点击)。
另请注意,您稍后可以将subscription
分配给其他内容,并会在其上调用dispose
。它并不真正与forEach
返回的对象绑定。点击处理程序将继续引用变量,而不是在创建变量时引用变量的值。