2010-11-12 4 views
5

Ich versuchte googlen, aber Google scheint sich nicht um Klammern zu kümmern ...Was bedeutet es, wenn eine Funktion mit}) (jQuery) endet?

+4

http://stackoverflow.com/questions/3458283/in-javascript-what-does-this-syntax-mean und http://stackoverflow.com/questions/2309614/what-does-this-javascript-jquery -Syntax-Mittelwert SO hat seine eigene Suche. Ich habe diese Antwort mit dem Titel Ihrer Frage gefunden. – user113716

+0

Schön, dass Sie diese Frage gestellt haben, wir alle benutzen das und wissen nicht, was es tut. Ich habe es jetzt geklärt. – kobe

+1

@gov - Diese Frage wird ständig gestellt. Hier ist ein anderer: http://stackoverflow.com/questions/2937227/jquery-what-does-function-jquery-mean und ein anderer: http://stackoverflow.com/questions/2976089/can-someone-explain-what-the -syntax-bedeutet-wenn-definieren-ein-jquery-plugin und andere: http://stackoverflow.com/questions/2464635/what-does-function-jquery-do-mean – user113716

Antwort

3

Wenn Sie dies sehen:

(function($) { 
    // ...code using $... 
})(jQuery); 

Es tut zwei Dinge:

  1. eine anonyme Funktion definieren, die $ als Verweis auf jQuery verwendet.
  2. Rufen Sie an, vorbei an jQuery.

Man könnte es wie folgt tun:

function foo($) { 
    // ...code using $... 
} 
foo(jQuery); 

... aber das bedeutet ein unnötiges Symbol.

All dies ist, weil jQuery hat das Symbol jQuery und das Symbol $, aber es ist nicht ungewöhnlich, dass Menschen jQuery.noConflict() zu verwenden jQuery zu sagen $ zurück zurückkehren, was es war, als jQuery geladen, weil ein paar anderen populärer Bibliotheken (Prototype und MooTools, um zwei zu nennen) verwenden Sie $ und dies ermöglicht es jemandem, diese Bibliotheken und jQuery zusammen zu verwenden. Aber Sie können immer noch $ innerhalb Ihrer Funktion verwenden, weil das Argument Schatten, was auch immer dieses Symbol außerhalb der Funktion bedeutet.

+0

Warum eine anonyme Funktion verwenden? Wenn es anonym und nicht wiederverwendbar ist, warum sollte es dann funktionieren? Warum nicht Ausdrücke verwenden? – polyhedron

+1

@polyedron - Diese Funktion soll nur einmal ausgeführt werden, daher ist kein Name erforderlich. Der Punkt T.J.macht, dass '$' zu einer lokalen Variable innerhalb der Funktion wird, die auf die globale 'jQuery'-Variable verweist. Wenn Sie '$' als globale Variable haben, liegt ein Konflikt vor, wenn eine andere Bibliothek denselben globalen Variablennamen verwendet. Auf diese Weise ist es privat und daher geschützt. – user113716

+1

@polyedron: In JavaScript können nur * Funktionen einen neuen Bereich erstellen. Sie müssen also eine Funktion verwenden, wenn Sie eine private Variable erstellen möchten. –

1

Es im Grunde automatisch ruft die anonyme/Lambda-Funktion definiert und liefert die jQuery Referenz darauf.

Ziemlich genau das gleiche wie functionCall(jQuery) außer Sie definieren es und rufen es in der gleichen Zeile/Ausdruck auf.

1

diese in der Regel in der Form sind ...

(function($) { 
    // do something with $ 
})(jQuery); 

Was bedeutet, dass die Funktion tatsächlich etwas tut mit jQuery (es function(a) {...} definiert und geht dann jQuery in als a), aber es will in der Lage sein, zu verwenden $ statt jQuery innerhalb der Funktion. Diese

ermöglicht Dinge wie $(this) und so weiter auch wenn jQuery aufgerufen wird, in No-Konflikt-Modus (und damit $ würde sich nicht auf jQuery normal).

Verwandte Themen