2016-07-31 7 views
0

nach MDN verursacht, was den Unterschied zwischen Code und FNC in SetTimeout

var timeoutID = window.setTimeout(func, [delay, param1, param2, ...]); 
var timeoutID = window.setTimeout(code, [delay]); 

wie Sie sehen können:

setTimeout(function() { 
      alert(2); 
     }, 0); 
     alert(1); 

das Ergebnis ist fristly '1' und '2' dann.

setTimeout(alert(2), 0); 
    alert(1); 

jedoch ist das Ergebnis zuerst '2' und dann '1'.

Was verursacht den Unterschied?

+0

im zweiten Fall 'alert' sofort ausgeführt wird und kein Timeout festgelegt wird. – pawel

+0

Das JS löst '' 'alert (2)' '' auf, da es möglicherweise eine Funktion zurückgibt, die Sie abbrechen möchten. Der erste ist ein zulässiger Timeout, der nach der aktuellen Ausführungswarteschlange ausgeführt wird. – horyd

+0

Übrigens gibt es eine weitere Option für Sie zu versuchen: 'setTimeout (" alert (2) ", 0);' – pawel

Antwort

1

Im Fall von

setTimeout(alert(2), 0); 
alert(1); 

Ersten alert(2) wird ausgeführt und der Rückgabewert (d.h. undefined) an setTimeout Funktion übergeben, während sie in dem ersten Beispiel eine Funktion zur setTimeout Funktion übergeben wird.

haben auch einen Blick auf: Why is setTimeout(fn, 0) sometimes useful?

Verwandte Themen