2016-08-25 26 views
1

我只想聽一次。這是有效的JavaScript?取消訂閱自己的回調中的封閉變量

const unsubscribe = obj.onFoo(x => { 
    unsubscribe() 
    // do things 
    }) 
+0

downvoter可以解釋嗎?這是我第一次使用返回取消訂閱功能的API,這對我來說看起來有點奇怪。它有效,但我不確定它可能會有什麼影響。 – user1164937

回答

1

是的,這是一個非常有效的方式叫unsubscribe()

即使功能未被分配到unsubscribe變量直到函數被構造之後,它也不是運行直到調用回調。當回調被調用時,它會查找unsubscribe標識符,並在的封閉範圍中找到它。標識符解析爲取消訂閱功能,因此會按照您的預期調用unsubscribe()

這是一個相當常見的模式。只是我頭頂的一個例子是清除AngularJS中的$watch函數 - Unbinding $watch in angularjs after called