2016-03-26 21 views
-3

için for döngüsü hakkında karışık Bu işlevin sonucu: "yoyo kardeşim".Javascript

Neden sadece ilk yinelemede eklenir, neden sonuç neden olmaz: "yoyo yomy yobrother"?

function myFunction() { 
    var cars = ["yo", "my", "brother"]; 
    var i = 2; 
    var len = cars.length; 
    var text = "yo"; 

    for (; i < len; i++) { //typo, var i=0; 
    text += cars[i]+ " "; 
} 
}; 

Oh sry, o typo xD'yi nasıl özlediğimi bilmiyorum. Yardım ettiğin için teşekkür ederim. Kodunuzda

+0

Paylaştığınız kodda yazım hataları var mı? Döngünün dışında olduğumu ilan ettiniz – Harangue

+0

Neden "yoyo yomy yobrother" olacağını düşünüyorsunuz? Ayrıca muhtemelen 'i' olarak tanımlamak istersiniz: var i = 0; '. –

+0

@Harangue Bunun bir yazım hatası olduğunu sanmıyorum. –

cevap

0

:

  • listenize i0 için dizinin ilk
    değerde başlatmak için ayarlamalısınız.

  • yo metninin eklenmesi için metninin bir başka değişkeni ekleyerek text değişkenini boş bırakabilirsiniz.

siz "yoyo yomy yobrother" sonuç almak istiyorsanız

böyle bir şey yapmak:

function myFunction() { 
    var cars = ["yo", "my", "brother"]; 

    var len = cars.length; 
    var text = ""; 
    var yotext = "yo"; 

    for (i=0; i < len; i++) { 
    text += yotext +cars[i]+ " "; 
} 
console.log(text); 
}; 

myFunction(); 

Fiddle

0

şu sen başlatmak anlamına varsayar i 0.

için

+= işleci, metni varolan dizeye eklediğinden. Sen yapıyoruz şu:

İlk yineleme: "yo" + "yo" + " " = "yoyo "

İkinci yineleme: "yoyo " + "my" + " " = "yoyo my "

Üçüncü yineleme:

1: "yoyo my " + "brother" + " " = "yoyo my brother "

0

Genellikle döngü için üç bölümden) Bir başlatıcı - değişkene bir başlangıç ​​noktası verir 2) Bir koşul - eğer doğruysa döngüyü sadece 3 -) bir tadil edici madde, bu gibi görünecektir nedenle döngüsü için tipik bir değişkeni

değerini değiştirir:

for (var i = 2; i < len; i++){ 

} 

döngü bu şekilde yürütülür: değere

  1. başlatma i 2.
  2. Koşulun doğru olup olmadığını kontrol edin (2, 3'ten küçüktür)
  3. Döngüye girer ve araçlara [2] ekler. Başka bir deyişle, 'kardeş' metne ekler.
  4. Döngünün bu yinelemesi tamamlandı. I ++ şimdi 1'e ekler. Şimdi 3.
  5. Durum kontrol edilir. ben artık len'den daha az değil (3 3'den küçük değil). Böylece program döngüden çıkar.

2 değerini değil de 0 değerini başlatmanın bir nedeni var mı?

0

Kodu bozalım.

3 öğe içeren bir dizi araç var. Sonra, daha sonra for döngüsünüzde yineleyici (sayaç) olarak görev yapan i bildirirsiniz. Devam edip bu kasıtsız olduğunu düşünmek için gidiyorum ve i döngü

for (var i=0; i<len; i++) 

A onun parantez içi kez belirtilen sayıda kodu tekrarlar for döngüsü içinde olmak için sen demekti. Formun ilk bölümü, ilk noktalı virgülün arkasındaki yineleyicidir. i, ifadenin 3. bölümüne göre döngüdeki her bir çalışma sırasında değişecektir, bu durumda i++. içeride, Nihayet, bu durumda, bizim dizide öğe sayısını 3.

- Bu açıklamada için ikinci bölüm ilen daha yakındır döngü tekrarlanacak belirtiyor 1. tarafından i artırılması anlamına gelir döngü için text += cars[i] + ""; hattı var. Bu, for döngüsünü her çalıştırdığında dizeleri bir araya getirmek için JavaScript'in olduğunu söylüyor. Her kaçak ardından "yo" ile başlayıp: Kod cars[i]+ " " için "yo" (text başlangıç ​​değeri) prepend gelmez

i string 
------------------------- 
0 "yoyo " 
1 "yoyo my" 
2 "yoyo my brother" 
0

Çünkü bunun yerine text döngü ile değişiyor hangi değeri ekler.

Döngüden çok += operatörüyle karıştırıldığına inanıyorum.

text += cars[i]+ " "; satırı text = text + cars[i]+ " "; eşdeğerdir.

Döngününüzü aşarak, text değeri, aşağıdaki gibi her yineleme ile değişecektir.

- yo 
0 yoyo 
1 yoyo my 
2 yoyo my brother 

Böylece text değeri, ilk döngünün değişecek ve artık "yo" olacaktır. Yani, "yoyo yomy yobrother" hiç işe yaramaz.