Buradaki performans sorunu, anonim bir işlev kullanmanız değil, döngünün her yinelemesinde yeni bir işlev nesnesi oluşturmanın maliyetidir:
for (var i = 0; i < 1000; ++i) {
myObjects[i].onMyEvent = function() {
};
}
Aynı kod gövdesine sahip olsalar ve sözcük kapsamına ( kapanış ) hiçbir bağlayıcılığı olmasalar bile, bin farklı işlev nesnesi oluşturuyorsunuz . Öte yandan, aşağıdakiler daha hızlı görünür, çünkü döngü boyunca dizi öğelerine aynı işlev referansını atar :
function myEventHandler() {
}
for (var i = 0; i < 1000; ++i) {
myObjects[i].onMyEvent = myEventHandler;
}
Döngüye girmeden önce anonim işlevi oluşturacak olsaydınız, o zaman yalnızca dizi öğelerine döngünün içindeyken başvurular atarsanız, adlandırılmış işlev sürümüyle karşılaştırıldığında herhangi bir performans veya anlamsal fark olmadığını göreceksiniz:
var handler = function() {
};
for (var i = 0; i < 1000; ++i) {
myObjects[i].onMyEvent = handler;
}
Kısacası, adlandırılmış işlevler yerine anonim kullanmanın gözlemlenebilir bir performans maliyeti yoktur.
Bir kenara, yukarıdan aşağıdakiler arasında hiçbir fark olmadığı görünebilir:
function myEventHandler() { }
ve:
var myEventHandler = function() { }
İlki bir işlev bildirimi iken, ikincisi anonim bir işleve değişken atamadır. Aynı etkiye sahip gibi görünseler de, JavaScript onlara biraz farklı davranır. Farkı anlamak için, " JavaScript fonksiyon beyanı belirsizliği " ni okumanızı tavsiye ederim .
Herhangi bir yaklaşım için gerçek yürütme süresi, büyük ölçüde tarayıcının derleyici ve çalışma zamanı uygulaması tarafından belirlenecektir. Modern tarayıcı performansının eksiksiz bir karşılaştırması için JS Perf sitesini ziyaret edin