$ (dokumen). sudah singkatan

245

Apakah singkatan berikut untuk $(document).ready?

(function($){

//some code

})(jQuery);

Saya melihat pola ini banyak digunakan, tetapi saya tidak dapat menemukan referensi untuk itu. Jika itu adalah singkatan $(document).ready(), apakah ada alasan tertentu itu mungkin tidak berfungsi? Dalam tes saya sepertinya selalu menyala sebelum acara siap.

Mark Brown
sumber
Variabel apa pun yang didefinisikan di dalam fungsi pola yang disebutkan (mis. var somevar;) Tidak akan mengubah isi variabel dengan nama yang sama di luar fungsi
Timo Huovinen
3
Kode memiliki efek memastikan $ mewakili jQuery di dalam blok fungsi tersebut sehingga kode tersebut portabel ke tempat-tempat di mana $ alias untuk jQuery dinonaktifkan atau didefinisikan sebagai sesuatu yang lain.
AsksAnyway

Jawaban:

252

Singkatan untuk $(document).ready(handler)is $(handler)(di mana handleradalah fungsi). Lihat di sini .

Kode dalam pertanyaan Anda tidak ada hubungannya dengan .ready(). Sebaliknya, ini adalah ekspresi fungsi yang dipanggil langsung (IIFE) dengan objek jQuery sebagai argumennya. Tujuannya adalah untuk membatasi ruang lingkup setidaknya $variabel ke bloknya sendiri sehingga tidak menimbulkan konflik. Anda biasanya melihat pola yang digunakan oleh plugin jQuery untuk memastikannya $ == jQuery.

BoltClock
sumber
14
Secara teknis ini adalah ekspresi fungsi yang segera dipanggil . Jika itu memohon pada diri sendiri, itu akan memanggil dirinya dari dalam dirinya sendiri. Cari di web untuk iife, atau langsung beralih ke posting blog terkenal Cowboy Alman . Detail ... sheesh.
2540625
546

Steno adalah:

$(function() {
    // Code here
});
Kyle Trauberman
sumber
24
Argumen pertama adalah $. Mungkin ingin menambahkan itu. Ini berguna untukjQuery(function($, undefined) {});
Raynos
5
@raynos Tidak diperlukan. kode di atas berfungsi dengan baik sebagai alias untuk$(document).ready(function(){ });
Kyle Trauberman
10
Hanya berguna untuk mengetahui bahwa Anda mendapatkan $secara gratis sebagai argumen pertama.
Raynos
3
Saya masih mengunjungi jawaban ini sebulan sekali atau lebih.
Nugsson
89

Steno yang benar adalah ini:

$(function() {
    // this behaves as if within document.ready
});

Kode yang Anda posting ...

(function($){

//some code

})(jQuery);

... membuat fungsi anonim dan menjalankannya segera dengan jQueryditeruskan sebagai argumen $. Yang perlu dilakukan adalah mengambil kode di dalam fungsi dan menjalankannya seperti biasa, karena $sudah menjadi alias untuk jQuery. : D

Gordon Gustafson
sumber
4
Anda bisa mengatakan bahwa itu juga memastikan bahwa $ adalah alias untuk jQuery, jika alat lain yang juga menggunakan $ sebagai alias dimuat
Jim Wolff
16

Ini bukan singkatan untuk $(document).ready().

Kode yang Anda poskan mengotakkan kode bagian dalam dan menjadikan jQuery tersedia $tanpa mencemari namespace global. Ini dapat digunakan ketika Anda ingin menggunakan prototipe dan jQuery pada satu halaman.

Didokumentasikan di sini: http://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/#use-an-immediately-invoked-function-expression

samy-delux
sumber
Terima kasih telah menjawab pertanyaan
MarcGuay
12

Baris khusus ini adalah pembungkus biasa untuk plugin jQuery:

"... untuk memastikan bahwa plugin Anda tidak bertabrakan dengan perpustakaan lain yang mungkin menggunakan tanda dolar, itu adalah praktik terbaik untuk meneruskan jQuery ke fungsi pelaksana mandiri (penutupan) yang memetakannya ke tanda dolar agar bisa ' tidak akan ditimpa oleh perpustakaan lain dalam lingkup pelaksanaannya. "

(function( $ ){
  $.fn.myPlugin = function() {
    // Do your awesome plugin stuff here
  };
})( jQuery );

Dari http://docs.jquery.com/Plugins/Authoring

morgar
sumber
11

Steno aman multi-kerangka kerja untuk siap adalah:

jQuery(function($, undefined) {
    // $ is guaranteed to be short for jQuery in this scope
    // undefined is provided because it could have been overwritten elsewhere
});

Ini karena jQuery bukan satu-satunya kerangka kerja yang menggunakan variabel $danundefined

Timo Huovinen
sumber
juga dapat ditulis sebagai(function($){ ... })(jQuery);
Mike Causer
2
@ MikeCauser juga pendekatan yang baik, tetapi tidak akan dipanggil ready, melainkan segera dipanggil
Timo Huovinen
5

Varian yang lebih pendek adalah untuk digunakan

$(()=>{

});

di mana $singkatan jQuery dan ()=>{}disebut 'fungsi panah' yang mewarisi thisdari penutupan. (Sehingga di dalam thisAnda mungkin akan memiliki windowbukan document.)

Edvard Rejthar
sumber
0

Bagaimana dengan ini?

(function($) { 
   $(function() {
     // more code using $ as alias to jQuery
     // will be fired when document is ready
   });
})(jQuery);
RN Kushwaha
sumber