2013-06-24 16 views
5

Javascript'te birbirini çağıran bir çift işlev nasıl tanımlanabilir, böylece JS-tint, 'faktöriyel' tanımlanmadan önce kullanıldığından şikayet etmiyor?javascript işlevleri arasında dairesel referanslar

function factorial1(n) { return factorial(n); } 
function factorial(n) { return n === 0 ? 1 : n * factorial1(n - 1); } 

JSlint'i tatmin edecek geçerli bir sipariş yok gibi görünüyor. (Biri diğerine gömülebilir, ancak bu, hepsi birbirini çağrıştıran işlevlerin toplanması için bir kabus olurdu).

Elbette bu, doğru olarak ele alınır? Bu sadece JSlint'teki bir hata mı? (Bu soru bir yerde yanıtlanmalıdır, ancak bulamıyorum!)

+0

Muhtemelen n === 0? 1: ... '. Ayrıca, ne işe yaramaz (zaten işaret ettiğim mantıksal hata hariç)? – Dogbert

+0

>> Şüphesiz bu dilin hakkıyla ele alınır? Genellikle biraz zaman geçtikten sonra sayfanızı tepkisiz hale gelir ve tarayıcı komut dosyası durdurabilir veya devam etmesine izin verdin ya soran bir pop-up uyarısı yukarı atar. – mohkhan

+0

@dobert evet, düzenlemeniz doğru. Ancak asıl mesele, JSlint'in 'faktöriyel' tanımlanmadan önce referans olarak kalmasından şikayet etmesidir. –

cevap

6

İşlevler içindeki başvurular çalıştırılana kadar çözülmez. Her iki işlev de, bir tanesi yürütüldüğü zaman tarafından tanımlandığı sürece, birbirlerini bulacaklardır. Ben işlevlerine bu sözdizimini tercih

var factorial; 
function factorial1(n) { return factorial(n); } 
function factorial(n) { return n === 0 ? 1 : n * factorial1(n - 1); } 
+0

Üzgünüm sorunu JS-tüysüz şikayetçi olmasıdır olduğunu açıklamak vermedi. –

+0

Teşekkürler! tabii ki. Adlandırılmış işlevlerle bir var işlevinde karıştırmayı düşünmedim! –

0

: Eğer JSLint uyarı kurtulmak istiyorsanız

, sadece önce, fonksiyonun adını tanımlayabiliriz

var factorial1 = function(n) { return factorial(n); } 
var factorial = function(n) { return n === 0 ? 1 : n * factorial1(n - 1); } 

Değil Bu sözdizimi ile "bildirme" işlevini unutabilecektir.

+0

Tüm ifadeler noktalı virgülle sonlandırılmalıdır. Burada büyük bir anlaşma değil, ancak bu ifadeleri kopyalayıp yapıştırırsanız sorunlara neden olabilir. –

İlgili konular