2015-04-23 4 views
-3
var friends = ["Miha", "Artur", "Karen", "zollex"]; 
var len = friends.length; 
var friend = 0; 
var msg = ''; 
var i; 
for (i = 0; i <len; i++){ 
    friend = (i + 1); 
    msg+= "Friend number " + friend + ":"; 
    msg+=friends[i] + "<br />"; 
    document.write(msg); 
} 

У меня есть следующий код, написанный выше. И это outpust следующий результат:javascript simple for loop

Друг номер 1: Миха
Друг номер 1: Миха
Друг № 2: Артур
Друг № 1: Миха
Друг № 2: Артур
Друг № 3: Karen
Друг номер 1: Миха
Друг № 2: Артур
Друг № 3: Карен
Друг номер 4: zollex

Хотя должно было быть только 4 друга. Мне очень любопытно, почему document.write повторяет одно и то же имя несколько раз.

+0

ваш внешний дисплей функция всегда звоните один раз. Вы показываете его в своем проходе ... выходите за пределы –

ответ

6

Поскольку вы строите строку на каждой итерации с помощью + = и вы не перезагружаете ее на каждой итерации.

msg += "Friend number " + friend + ":"; 
    ^^ 
msg += friends[i] + "<br />"; 
    ^^ 

Перемещение document.write вне для цикла или установить msg обратно опустошить на каждой итерации.

var friends = ["Miha", "Artur", "Karen", "zollex"]; 
var len = friends.length; 
var friend = 0; 
var msg = ''; 
var i; 
for (i = 0; i <len; i++){ 
    friend = (i + 1); 
    msg += "Friend number " + friend + ":"; 
    msg += friends[i] + "<br />"; 
} 
document.write(msg); 
+0

спасибо, понял! –

2
for (i = 0; i <len; i++){ 
    msg = ''; 
    friend = (i + 1); 
    msg+= "Friend number " + friend + ":"; 
    msg+=friends[i] + "<br />"; 
    document.write(msg); 
} 

Вы переписываете переменную msg в каждом цикле, в то время как вы должны очищать ее на каждом из них!

+0

, почему на земле забиты? – Enjoyted

+0

Возможно, потому, что ваша первая версия была смехотворной и неправильной. – epascarello

+0

Я только что пропустил копию прошлого, нет необходимости понижать 5 секунд после того, как кто-то отправит ответ;) – Enjoyted