Javascript超时 - 函数中的值如何记住?
问题描述:
我有这样的功能:Javascript超时 - 函数中的值如何记住?
//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 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)
答
这似乎是安全的。 streamId变量处于您的addFailedSubscription函数的范围内。即使函数返回,您的$超时函数也具有与streamId相同的范围。 $ timeout函数看起来像一个闭包,因为它在本地环境中使用非本地变量。
是的,这是一个封闭。 – Pointy