2016-10-12 1 views
0

Ich bin neugierig, gibt es einen Unterschied zwischen den beiden folgenden Funktionen?Unterschied zwischen dem Weiterleiten eines Callbacks und einer Funktion

Wird nur eine Funktion in einer anonymen Funktion übergeben, wenn ready während die andere eine tatsächliche benannte Funktion übergibt, wenn ready?

Beispiel:

<p>Not loaded yet.</p> 

Erste Methode:

function newName() { 
    $("p").text("The DOM is now loaded and can be manipulated.") 
} 

$(document).ready(function() { 
    newName() 
}); 

Zweite Methode:

function newName() { 
    $("p").text("The DOM is now loaded and can be manipulated.") 
} 

$(document).ready(newName()); 

Ist ein richtiger als das andere?

+1

In '$ (document) .ready (newName());' Die Funktion 'newName' wird *** nicht *** ausgeführt, wenn das DOM geladen ist, es läuft * vor *. Dies liegt daran, dass Sie es sofort ausführen und seinen Rückgabewert als DOM ready-Handler übergeben. –

+0

Warum die down vote? –

Antwort

2

Ist man nur eine Funktion innerhalb einer anonymen Funktion übergeben, wenn ready während der andere eine tatsächliche benannte Funktion, wenn ready vorbei?

Ja und nein.

Ich bin gespannt, gibt es einen Unterschied zwischen den beiden?

Der erste gibt eine Callback-Funktion weiter, die ausgeführt wird, wenn das Ereignis ausgelöst wird. Wann das überhaupt brennt, wird erläutert here.

Letzteres übergibt den aufgelösten Rückgabewert (der undefined ist, da newName keine Rückgabeanweisung hat), die nicht identisch mit der Sekunde ist. Der Grund, warum es den Rückgabewert an ready übergibt, liegt daran, dass Sie die Funktion sofort aufrufen (was möglicherweise so aussieht, als ob es funktioniert), die dann den Rückgabewert übergibt. Damit sie funktionell Äquivalent tun:

$(document).ready(newName); 

Dies wird eine Funktion Referenz, übergeben und wird es nicht aufrufen. Wie bereits erwähnt, ist der Aufruf als ready(func(); func2();) keine gültige Syntax.

+0

Danke! Sie fragten, weil ersteres nicht funktioniert, letzteres aber. '$ (document) .ready (neuerName(); andererName(); andererName1());' ist derjenige, der merkwürdig funktioniert hat. –

+0

@JoshChristensen: Ich weiß nicht, wo du das gesehen hast, aber es ist ein Syntaxfehler. Wahrscheinlich wollten Sie '$ (document) .ready (function() {newName(); andererName(); andererName1();});'. –

+1

@JoshChristensen In der ersten übergeben Sie einen Rückruf, der bei Ereignisauslösung ausgeführt wird. Die zweite, Sie * rufen * die Funktion zuerst auf (und scheinen so zu funktionieren), dann übergeben Sie den Rückgabewert der Funktion an "bereit", was keinen Sinn ergibt. – Li357

1

Effektiv gibt es keinen Unterschied zwischen

$(document).ready(function(){ 
    newName(); 
}); 

und

$(document).ready(newName); 

Es gibt einen kleinen technischen Unterschied: Im ersten Schnipsel, eine anonyme Funktion newName Aufruf übergeben wird, in dem zweiten Code-Schnipsel, die benannt Funktion newNameselbst ist bestanden.

Funktionen sind nur aufrufbare Objekte, auf die durch ihren Namen oder den Namen einer Variablen verwiesen werden kann, die die Funktion enthält.

Beachten Sie, dass $(document).ready(newName());newName ruft - sofort - und das Bestehen der Rückgabewert-ready. Dies macht nur Sinn, wenn newName eine andere Funktion zurückgibt, was in diesem Fall nicht der Fall ist. Der Titel erwähnt auch etwas wie . Ich gehe davon aus, dass das ein Tippfehler ist, da das keine gültige Syntax ist.

$(document).ready(newName(); otherName(); otherName1()); ist auch keine gültige Syntax.

+0

Sie haben Recht, der Titel hat einen Tippfehler, danke –

Verwandte Themen