2017-07-26 13 views
0

我有这样的功能: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对超时函数是否可用?它是否有效地创建了这个函数的闭包?

感谢

+1

是的,这是一个封闭。 – Pointy

回答

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)

0

这似乎是安全的。 streamId变量处于您的addFailedSubscription函数的范围内。即使函数返回,您的$超时函数也具有与streamId相同的范围。 $ timeout函数看起来像一个闭包,因为它在本地环境中使用非本地变量。