Bulduğum bu Javascript örneğini verdim
var sum = function() {
var i, sum = 0;
for(i = 0; i < arguments.length; i += 1) {
sum += arguments[i];
}
return sum;
};
Bir varlığa bir işlev atamanın avantajı nedir?
Bulduğum bu Javascript örneğini verdim
var sum = function() {
var i, sum = 0;
for(i = 0; i < arguments.length; i += 1) {
sum += arguments[i];
}
return sum;
};
Bir varlığa bir işlev atamanın avantajı nedir?
Yanıtlar:
Ben inanıyorum kısa cevap basitçe adlandırılmış bir işlev oluşturmak yerine, bir değişkene atanan anonim bir işlev oluşturmak olduğunu ...
function sum() {}
Farklılıkları kontrol etmenin iyi bir yolu, üzerlerinde .ToString () öğesini çağırmak ve farkı görmek ya da console.log (sum.name) işlemini yapmaktır. Biri gerçek bir isim verirken diğeri ise anonim işlev (var'a atanan işlev) verir. Var sum = function () {} çalışma zamanında tanımlanır ve sum () {} işlev ayrıştırma zamanında tanımlanır gibi özellikler de vardır.
Bir avantaj, bir blokta işlev bildirimi kullanamamanızdır. Yalnızca bir dosyanın en üst düzeyinde veya doğrudan başka bir işlev içinde olabilirler.
if (true) {
function foo() {}
}
try {
function foo(){}
}
switch (true) {
default:
function foo(){}
}
Bunların tümü standart tarafından belirtilmemiş ve tarayıcılar farklı şeyler yapıyor, bkz. Https://stackoverflow.com/questions/10069204/function-declarations-inside-if-else-statements . Yani bazen diğer stili kullanmak zorundaysanız, tutarlılık için her zaman yapmak isteyebilirsiniz
Ayrıca, bundan emin değilim ama doğru hatırlarsam, bazı eski minifüsler işlev bildirimlerini işleyecek ve onları yeniden adlandırmayacak kadar akıllı değildi.
Ben bir Javascript uzmanı değilim, bu yüzden bunu bir tane tuzla al. Bazı durumlarda insanlar bunu stil için yapabilirler ve aynı şey sadece "işlev toplamı () {...}" yazarak da elde edilebilir.
Bununla birlikte, bir değişkene bir işlev atamak, işlevsel programlamada çok güçlü bir tekniktir. OOP hakkında bilginiz varsa, polimorfizme benzer. Hayvan temel sınıfının ve Kedi / Köpek türetme sınıflarının klasik örneğini düşünün. Animal ile çalışan kod yazabilirsiniz, ancak bir işlev çağırdığında, bu işlev bir örneğin türüne bağlı olarak farklı işler yapabilir.
İşlevsel programlamada, "bir işlev" ile çalışan bir algoritmaya sahip olabilirsiniz, ancak bu işlevi çağırmak için bir değişken kullanıyorsanız, çalışma zamanında farklı bir işlev atama esnekliğine sahip olursunuz.
Örneğin, yalnızca 500 piksel olan bir pencerede 10.000 veri noktası sunmak için bir algoritma yazdığınızı varsayalım. Daha sonra her piksel 20 veri noktasını temsil eder ve bunları sunmak için bu 20 veri noktasını tek bir değerde toplamanız gerekir.
Diyelim ki 10.000 noktayı sunmak için bir algoritma tanımladınız ve bu algoritma aggregate adında bir fonksiyon değişkeni kullanıyor:
...
displayValue = aggregate( numbersInOnePixel );
...
Artık çalışma zamanında kullanıcı verilerinizin nasıl toplanacağını seçebilir. Gerçek işlev değişkeniniz aşağıdakilerden herhangi biri olabilir:
aggregate = function sum() {...}
aggregate = function min() {...}
aggregate = function max() {...}
aggregate = function average() {...}
Çoğunlukla bir stil meselesidir, çünkü farkın ortaya çıktığı tek durumlar (tüm beyanları bitirmeden önce bazı işlevleri çağırmak; toString yöntemini kullanmak) benim düşünceme göre bir tür köşe vakasıdır.
Bu var =stili desteklediğini duyduğum argümanlardan biri, normal değişkenleri nasıl beyan ettiğinizle tutarlı olmasıdır. Bu, kullandığınız dil özelliklerinin sayısını sınırlar ve programınızı Javascript'te yeni olan birine tanıtmayı kolaylaştırır.