2017-07-26 4 views
0

Ich habe diese Funktion:Javascript-Timeout - wie wird der Wert in der Funktion gespeichert?

//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); 
} 

dies sicher ist? Wie ist es, dass StreamId für die Timeout-Funktion verfügbar ist, nachdem die Funktion zurückgegeben wurde? Schafft es effektiv eine Schließung für diese Funktion?

Dank

+1

Ja, das ist eine Schließung. – Pointy

Antwort

0

es getan closures JS verwenden werden können. Arbeits Demo unter:

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

Dies scheint sicher zu sein. Die streamId Variable ist im Bereich Ihrer addFailedSubscription Funktion. Ihre $ Timeout-Funktion hat den gleichen Umfang, der streamId sogar nach der Funktion zurückgibt. Die $ timeout-Funktion sieht wie eine Schließung aus, da sie eine nicht lokale Variable in einer lokalen Umgebung verwendet.

Verwandte Themen