我有这个功能:
//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 如何可用于超时函数?它是否有效地为此函数创建了闭包?
谢谢
可以使用JS闭包来完成。 工作演示如下:
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)
这似乎是安全的。streamId变量位于addFailedSubscription函数的范围内。即使在函数返回后,您的$timeout功能也与streamId具有相同的作用域。 $timeout函数看起来像闭包,因为它在局部环境中使用非局部变量。