Masalah kinerja di sini adalah biaya pembuatan objek fungsi baru di setiap iterasi perulangan dan bukan fakta bahwa Anda menggunakan fungsi anonim:
for (var i = 0; i < 1000; ++i) {
myObjects[i].onMyEvent = function() {
};
}
Anda membuat seribu objek fungsi yang berbeda meskipun objek tersebut memiliki badan kode yang sama dan tidak mengikat ke lingkup leksikal ( closure ). Sebaliknya, berikut ini tampak lebih cepat, karena ini hanya menetapkan referensi fungsi yang sama ke elemen array di seluruh loop:
function myEventHandler() {
}
for (var i = 0; i < 1000; ++i) {
myObjects[i].onMyEvent = myEventHandler;
}
Jika Anda membuat fungsi anonim sebelum memasuki loop, kemudian hanya menetapkan referensi ke elemen array sementara di dalam loop, Anda akan menemukan bahwa tidak ada perbedaan kinerja atau semantik apa pun jika dibandingkan dengan versi fungsi bernama:
var handler = function() {
};
for (var i = 0; i < 1000; ++i) {
myObjects[i].onMyEvent = handler;
}
Singkatnya, tidak ada biaya kinerja yang dapat diamati untuk menggunakan anonim atas fungsi bernama.
Selain itu, dari atas mungkin tampak bahwa tidak ada perbedaan antara:
function myEventHandler() { }
dan:
var myEventHandler = function() { }
Yang pertama adalah deklarasi fungsi sedangkan yang terakhir adalah tugas variabel ke fungsi anonim. Meskipun mungkin tampak memiliki efek yang sama, JavaScript memperlakukannya sedikit berbeda. Untuk memahami perbedaannya, saya sarankan membaca, " ambiguitas deklarasi fungsi JavaScript ".
Waktu eksekusi aktual untuk pendekatan apa pun sebagian besar akan ditentukan oleh implementasi kompilator dan waktu proses browser. Untuk perbandingan lengkap kinerja browser modern, kunjungi situs JS Perf