我有这个功能:
//We will store any failed subscriptions and retry them until the succeed (if ever)
addFailedSubscription: function(streamId) {
failedSubscriptions[streamId] = true;
$timeout(function() {
failedSubscriptions[streamId] = null;
}, 5000);
}
这样安全吗?函数返回后,如何将streamId用于超时功能?它是否有效地为此函数创建了一个闭包?
由于
答案 0 :(得分:0)
可以使用JS closures完成。 下面的工作演示:
var $timeout = setTimeout;
var failedSubscriptions = {}
var x = {
addFailedSubscription: function(streamId) {
console.log('streamId ', streamId)
failedSubscriptions[streamId] = true;
(function(id) {
$timeout(function(streamId) {
console.log('streamId ',id);
failedSubscriptions[streamId] = null;
}, 5000)
})(streamId)
}
}
x.addFailedSubscription(10)
答案 1 :(得分:0)
这似乎是安全的。 streamId 变量位于 addFailedSubscription 函数的范围内。即使在函数返回后,您的$ timeout函数与 streamId 具有相同的范围。 $ timeout函数看起来像一个闭包,因为它在本地环境中使用非局部变量。