2013-03-06 3 views
3

В JavaScript, у меня возникают проблемы с пониманием, почему эти два набора кода обеспечивают разные результаты:Различные результаты с оператором после приращения в течение цикла

for (var i = 0, a = []; i++ < 9;) {a.push(i);} 

После выполнения этого кода, переменная a следующая : [1, 2, 3, 4, 5, 6, 7, 8, 9].

Однако этот код возвращает что-то другое:

for (var i = 0, a = []; i < 9; i++) {a.push(i);} 

Вместо переменной a следующая после выполнения этого кода: [0, 1, 2, 3, 4, 5, 6, 7, 8]

Итак, главный вопрос: Почему это так?

Спасибо за любые ответы, объясняющие эту разницу.

+0

В первом случае приращение происходит до нажатия и после проверки на <9. Следовательно, вы получаете числа от 1 до 9. Во втором коде значение i увеличивается только после первого запуска, а проверка на <9 выполняется после приращения. –

+0

Вы можете посмотреть на выражение цикла for на http://www.w3schools.com/js/js_loop_for.asp –

ответ

2

Это просто порядок, в котором выполняются операции цикла for. Три выражений вычисляются:

for (before the loop starts;     // initialization 
     before each iteration of the loop;  // loop condition 
     at the end of each iteration of the loop) // loop increment 

Это делает ваш i++ получить работать в разное время по отношению к телу цикла и объясняют результаты, которые вы видите.

+0

Спасибо, я понимаю это сейчас. Означает ли это, что то, что возвращается i ++, передается следующему условию, делая разницу между ++ i и i ++, когда оно находится в области приращения? –

+0

Я не совсем уверен, что понимаю этот вопрос. Вы спрашиваете о различии между операторами предварительного и последующего приращения? –

+0

Хорошо, позвольте мне объяснить. Взгляните на этот пример: 'i = 0; i ++; i' Он всегда будет возвращать 1, независимо от того, является ли это 'i ++' или '++ i'. Однако для этого кода: 'i = 0; i ++ ', он вернет 0. –

Смежные вопросы