forDöngü ve forEachyöntem arasındaki en önemli fark , birincisi ile breakdöngüden çıkabilmenizdir. Simülasyonunu continue, sadece geçilen işlevden dönerek yapabilirsiniz forEach, ancak döngüyü tamamen durdurmanın bir yolu yoktur.
Bunun yanı sıra, ikisi etkili bir şekilde aynı işlevselliği gerçekleştirir. Diğer bir küçük fark, değişken kaldırma nedeniyle for döngüsündeki dizinin kapsamını (ve tüm içeren değişkenleri) içerir.
for (var i = 0; i < arr.length; i++) { ... }
arr.forEach(function (el, i) { ... });
Bununla birlikte, bunu forEachçok daha anlamlı buluyorum - bir dizinin her bir öğesi boyunca yineleme yapma niyetinizi temsil ediyor ve size yalnızca dizine değil öğeye de bir referans sağlıyor. Genel olarak, çoğunlukla kişisel zevkinize bağlı, ancak kullanabiliyorsanız forEach, kullanmanızı tavsiye ederim.
İki versiyon arasında, özellikle performansla ilgili birkaç önemli fark daha var. Aslında, bu jsperf testininforEach gösterdiği gibi basit for döngüsü yöntemden önemli ölçüde daha iyi performans gösterir .
Böyle bir performansın sizin için gerekli olup olmadığına karar vermek size bağlıdır ve çoğu durumda, ifade gücünün hıza göre olmasını tercih ederim. Bu hız farkı, muhtemelen bu yanıtta belirtildiği gibi seyrek dizilerde çalışırken temel döngü ile yöntem arasındaki küçük anlamsal farklılıklardan kaynaklanmaktadır .
Davranışına ihtiyacınız yoksa forEachve / veya döngüden erken çıkmanız gerekiyorsa, Lo-Dash'i _.eachalternatif olarak kullanabilirsiniz , bu da tarayıcılar arası çalışacaktır. JQuery kullanıyorsanız, aynı zamanda bir benzer sağlar $.each, her varyasyonda geri arama işlevine iletilen bağımsız değişkenlerdeki farklılıkları not edin.
( forEachPolyfill'e gelince , bu rotaya gitmeyi seçerseniz, eski tarayıcılarda sorunsuz çalışmalıdır.)
breakdışınaforEach. Ancak büyük bir avantaj, işlevle yeni bir kapsam oluşturmaktır. Polyfill ile herhangi bir problem yaşamazsınız (en azından ben hiç karşılaşmadım).