2010-11-22 4 views

Antwort

12

Nein. ClearTimeout muss nur aufgerufen werden, wenn Sie ein ausstehendes setTimeout stoppen möchten. Nach dem setTimeout ist die Timer-ID nicht mehr gültig, aber glücklicherweise ist das Aufrufen von clearTimeout mit einer ungültigen Timer-ID harmlos.

Wenn Speicherlecks auftreten, liegt das Problem woanders.

6

Es gibt Zeiten, in denen SetTimeout können Speicherverluste verursachen ... siehe den folgenden Artikel: setTimeout memory leaks

Seien Sie gewarnt, dass IEx eine Garbage-Collector-Feinheit hat, obwohl; Ich denke, wenn Sie eine DOM-Variable in einem JavaScript-Closure referenzieren, dann wird der Sammelmechanismus verwirrt und am Ende der Anfrage wird er nicht verworfen: Schließlich wird dies zu einem Speicherleck. Ich denke, das liegt daran, dass DOM-Variablen und interne JS-Variablen von zwei verschiedenen Kollektoren gesammelt werden und nicht richtig darüber kommunizieren, was nicht mehr verwendet wird.

Ich glaube, Sie können dieses Problem beheben, indem Sie die Variable auf null setzen:

setTimeout(function(){ 
    myFunction(parameter); 
    parameter = null 
}, myTimeout); 

Diese explizit setzt die Garbage Collection in Bewegung.

Verwandte Themen