Javascript超时 - 如何记住函数中的值?

时间:2017-07-26 12:18:09

标签: javascript timeout closures

我有这个功能:

//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用于超时功能?它是否有效地为此函数创建了一个闭包?

由于

2 个答案:

答案 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函数看起来像一个闭包,因为它在本地环境中使用非局部变量。