2011-01-20 19 views
8

Olası yinelenen performansı: ayrıştırma performans etkileri (varsa) nelerdir
Does use of anonymous functions affect performance?JavaScript: function (vs var functionName = function() {}) {}

ve Javascript'teki işlev ifadesi vs bildirimi kullanırken çalışma zamanı?

var functionOne = function() { 
    // Some code 
} 

ya:

function functionTwo() { 
    // Some code 
} 

NOT: Örneğin

, performans özellikleri ve aşağıdaki iki yoldan farklar nelerdir soru işlev bildirmek için hızlı olup olmadığı hakkında değil ama işlev yürütme hakkında.

+0

Bilmiyorum. Gerçekten önemsersen, deneysel olarak denemelisin, ama benim tahminim, hiçbir farkın olmaması. –

+3

Bakın: [Anonim işlevlerin kullanılması performansı etkiler mi?] (Http://stackoverflow.com/questions/80802/does-use-of-anonymous-functions-affect-performance) (kısa cevap: içeriğine bağlıdır) ifade). – Shog9

+0

Bu jsPerf'e bir göz atın: https://jsperf.com/anonymus-vs-declaration-vs-expression Bunu, Firefox 56, Chrome 62.0.3202 ve IE 11'de çalıştırdım. yaklaşımlar küçüktü. –

cevap

11

Performans farklarından çok daha önemli olanlar, bu ikisi arasındaki semantik farklılıklarıdır.

  • bir işlev tanımlama ifadesi (ikinci numune) ile bildirilen bir işlev yığın izleri vs. görünecektir bir adı vardır
  • Fonksiyon tanımlama ifadeleri kendi blokların üstüne "hoisted" ve sanki yorumlanır Onlar aslında, fonksiyonun çalışmasındaki diğer ifadelerden önce oradalardı.

Performans farkları, en azından modern çalışma ortamı ortamlarında bile algılanabilir olsa bile oldukça küçük olabilir.

+0

Sağ. * Çalıştırmak için * bir fonksiyon bildirimi yapılması gereken zaman, fonksiyonun ilk etapta derlenmesi için gereken süreye göre daha küçüktür (fonksiyonların gerçekte bazı kodların olduğu varsayılarak). –

+1

Anlambilimsel farklılıkların daha önemli olduğunu anlıyorum, ancak herhangi bir performans etkisinin olup olmadığını bilmek istiyorum. Bu, javascript içindeki bellek yönetiminin, tahsisin vb. Işlevlerin nasıl bildirildiğine bakılmaksızın aynı olacağı anlamına mı geliyor? – user148273

+0

Evet, birisinin hayal edebileceği ilginç egzotik koşullar haricinde, bu işlevler siz onları çağırdıktan sonra nasıl çalışacaklarına dair bir fark yoktur; Her iki şekilde de tam donanımlı gerçek işlevlerdir. İsme sahip olmak güzel çünkü isim yığın izlerinde gözüküyor. Sözdizimi, gerçek bir tanım ifadesi olsun ya da olmasın, bir adın sağlanmasına izin verir, ancak tarayıcı hataları, yapmak için (bu çok kötü) yapması gereken bir şey yapar. – Pointy

10

İşte bir JSPerf Bağlantısı, birden çok tarayıcıda denemeyi deneyin, çünkü sonuçlar değişiklik gösterebilir. Krom 10'da işlev ifadesi daha iyi bir skor aldı. http://jsperf.com/fn-expression-vs-statement

+1

+1. –

+0

Farklar her durumda * minik *. Soruyu açıkladığım gibi, önemli olan konu şudur: http://jsperf.com/fn-expression-vs-statement/3 – Shog9

+0

Ya, hangisi daha çekici ve okunabilir görünüyorsa onu seçmeliyim. –

İlgili konular