jQuery dollar sign ( $ ) jako argument funkcji?
Rozumiem zamknięcia JavaScript i widziałem to w natywnym JS:
(function () {
// all JS code here
})();
Ale co robi dodawanie jQuery spice?
(function ($) {
// all JS code here
})(jQuery);
4 answers
Jest to sposób mapowania jQuery do $ w taki sposób, aby nie cały kod na stronie go widział.
Być może masz istniejący skrypt, który używa jQuery, który chcesz ponownie użyć, ale używasz również prototype, który również używa $ na tej samej stronie.
Owijając dowolny jQuery używając kodu w tej konstrukcji, redefiniujesz $ do jQuery dla zawartej części bez wchodzenia w konflikt z innym kodem na stronie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-13 08:21:39
Kiedy widzisz:
(function() {
// all JS code here
})();
Jest znana jako samo-wywołująca się funkcja anonimowa . Funkcja jest wykonywana zaraz po jej przetworzeniu z powodu dodania ()
na końcu (w ten sposób uruchamiasz funkcje js).
Zauważ, że dodatkowe szelki zewnętrzne to tylko konwencja, możesz też napisać to tak:
function() {
// all JS code here
}();
Ale ta konwencja jest mocno używana wszędzie i powinieneś się jej trzymać.
(function($) {
// all JS code here
})(jQuery);
Tutaj $
jest odwzorowywane na jQuery
obiekt tak, że ty przydałoby się $
zamiast słowa kluczowego jQuery
. Można też umieścić tam jakąś inną postać:
(function(j) {
// all JS code here
})(jQuery);
Tutaj {[9] } jest odwzorowywany na jQuery
obiekt.
Zauważ również, że argumenty określone dla funkcji samo-wywołującej pozostają w zakresie tej funkcji i nie są sprzeczne z zewnętrznym zakresem / zmiennymi.
Napisałem artykuł na ten temat, proszę sprawdzić:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-13 08:24:59
(function() {
// all JS code here
})();
Jest bezpośrednio wywołanym wyrażeniem funkcji ( IIFE ), wymawianym "iffy". Niektórzy nazywają je też "anonimowymi, samo-wykonującymi się funkcjami", lub po prostu"samo-wykonującymi funkcjami".
(function(aParameter) {
alert(aParameter); // will alert "an argument"
})("an argument");
Oto IIFE, które pobiera parametr "aparat" i przekazuje sobie argument "argument".
(function($){
alert($(window).jquery); // alert the version of jQuery
})(jQuery);
Ten jest podobny, ale" jQuery "(instancja obiektu jQuery) jest argumentem IIFE i w tym przypadku jQuery jest przekazywany jako parametr'$'. W tym sposób, po prostu wpisując'$', ciało IIFE ma dostęp do jQuery i jego członków. Jest to wspólna konwencja jQuery i jest to wspólne dla osób piszących wtyczki jQuery, aby utrzymać tę konwencję w ten sposób.
Powyższy kod nie tylko zachowuje konwencję jQuery, ale także zapewnia, że ani ty, ani nikt inny nie może przypadkowo złamać tej konwencji. Np. weź następujący kod:
var $ = function() {
alert('foo');
}
Ten kod zamienia ' $ ' w coś, co zdecydowanie nie jest jQuery. Jeśli ktoś zrobił to w innym kodzie poza kodem wtyczki, a następnie nie jawnie przekazać jQuery jako " $ "do wtyczki, to nie będzie w stanie użyć" $ " jako jQuery jak zwykle zrobić.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-01 22:48:37
Są dwa powody, dla których jQuery jest zamykane w ten sposób.
Zdecydowanie najbardziej znaczące jest to, że sprawia, że Twój kod działa na stronach, które używają jQuery 's" bez konfliktu " tryb , który pozwala na użycie jQuery wraz z innymi bibliotekami, które chcą kontrolować $
globalny. Z tego powodu technika (function($) { ... })(jQuery)
jest silnie zalecana przy pisaniu wtyczek jQuery.
Drugim powodem jest to, że czyni $
zmienną lokalną w zakresie funkcja samoczynna i dostęp do zmiennych lokalnych jest (marginalnie) szybszy niż dostęp do zmiennych globalnych. Osobiście nie uważam tego za bardzo przekonujący powód - nie wyobrażam sobie scenariusza, w którym narzut korzystania z metod jQuery zamiast DOM byłby akceptowalny, ale dostęp do jQuery jako zmiennej globalnej nie byłby.: -)
Powiedziałbym, że najlepszym powodem, aby użyć tej techniki, gdy Nie pisanie wtyczki jest dla spójności - jesteś mniej prawdopodobne, aby zapomnieć to zrobić kiedy to jest Ważne, Jeśli masz w zwyczaju robić to, kiedy nie jest . Poza tym nigdy nie wiesz, kiedy będziesz miał okazję do recyklingu kodu!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-13 19:17:27