Seperti yang dapat Anda bayangkan, ada banyak cara untuk segera menjalankan fungsi anonim. Singkatnya, ada tiga cara umum (ada cara lain, harap beri tahu kami):
Metode satu
(fungsi() {
//…
})();
Metode 2
fungsi kosong() {
//…
}();
Metode ketiga
~fungsi() {
//…
}();
Anda mungkin pernah melihat Metode 1 dan Metode 2. Di sini kami terutama menjelaskan Metode 3. Sebelum menjelaskan cara ketiga, sekarang kita ulas definisi operator "~" (bit negasi) di EMCAScript (halaman 72 edisi kelima), terjemahan sederhananya:
Ubah nilai lama menjadi bilangan bulat 32-bit dengan menggabungkan pernyataan dengan operator. Jalankan pernyataan setelah operator dan konversikan baris.
Seperti yang dapat dipahami di atas, pada kenyataannya, operator bitwise dapat segera mengembalikan nilai dari ekspresi berikut. Faktanya, operator bitwise lain dapat mencapai tujuan ini, misalnya:
!fungsi() {
//…
}();
dll. dapat mencapai tujuan kita. Jadi sebenarnya tidak ada alasan lain untuk menggunakan "~", hanya saja kodenya "kelihatannya bagus" :^)
Efisiensi bukanlah efisiensi pelaksanaan fungsi anonim dalam tiga cara, tetapi lebih baik menganalisis langsung efisiensi pelaksanaan masing-masing operator. Jadi mari kita bandingkan dan lihat definisi “()” dan “void” dalam spesifikasi EMCA
Operator Grup (edisi kelima, halaman 66)
Mengembalikan hasil eksekusi ekspresi
batal (halaman 70, edisi ke-5)
Menggabungkan pernyataan dengan operator menghasilkan hasil yang tidak terdefinisi
Karena operator grup juga perlu mengeksekusi pernyataan dan mengembalikan nilai yang dikembalikan oleh blok pernyataan, dibandingkan dengan void, akan ada beberapa operasi untuk mendapatkan blok pernyataan (walaupun tidak memakan banyak kinerja), jadi dalam hal ini kinerjanya of void lebih baik daripada operator grup.
Membandingkan keduanya, perbandingan kinerja metode ketiga jelas lebih rendah dibandingkan dua metode pertama. Singkatnya, dari sudut pandang tata bahasa, di antara tiga metode fungsi anonim di atas, metode dua lebih baik daripada metode satu, dan metode tiga adalah yang paling tidak efisien.
Ringkaslah dan pikirkan keuntungan di antara ketiganya
Cara 1 sangat umum dan aman, jadi tidak ada yang akan menyalahkan Anda karena menggunakan cara ini. Namun, siswa yang menggunakan cara 1 mungkin sering membuat "masalah" lupa mencocokkan tanda kurung (terutama jika blok pernyataannya sangat panjang. , I sering salah)
Menggunakan operator bitwise untuk menjalankan fungsi anonim sangat trendi dan digunakan agar terlihat keren. Banyak IDE (seperti IDEA) dan alat penyorotan sintaksis tidak mendukung cara penulisan ketiga.
void adalah yang paling efisien, tetapi selalu terasa sangat membengkak dibandingkan dua implementasi lainnya (hanya beberapa karakter lagi?)
Jadi
Mengingat jumlah kode dan efisiensi, sebaiknya gunakan metode satu dalam kasus ekstrim di mana kode tambahan perlu disimpan, dan gunakan metode tiga untuk mengutamakan efisiensi. Kemudian saya ingin menjelaskan penggunaan metode dua di sini Faktanya, perbedaan efisiensi antara ketiga metode tersebut sangat kecil. Oleh karena itu, hampir tidak mungkin menggunakan metode tersebut hanya berdasarkan efisiensi.
Rencana khusus yang akan diadopsi perlu dipertimbangkan berdasarkan situasi aktual. Misalnya saya sering menggunakan cara ketiga karena 1. Nyaman (cukup tambahkan satu karakter) 2. Mencocokkan tanda kurung jika fungsinya panjang akan membuat pusing 3. Asik digunakan, tetapi cara 3 sering membuat saya melihatnya Kode anggota tim bermasalah.
Jika Anda memiliki kode dasar berbasis kerangka seperti beberapa perpustakaan kelas, menggunakan metode 1 adalah yang paling aman dan mudah dipahami semua orang, jadi ini adalah pilihan yang paling aman.
[Teks asli: http://www.gracecode.com/archives/3004/ Bagus sekali, semua orang bisa belajar darinya