#javascript #arrays #for-loop
#javascript #массивы #for-loop
Вопрос:
Я написал следующую функцию, которая должна регистрировать массив, начинающийся с «0» и заканчивающийся аргументом функции (в данном случае «40»), на консоль.
function range(num) {
var holder = [];
for(var i = 0; i <= num; i ) {
holder.push(i);
return holder;
}
}
console.log(range(40));
Вместо этого регистрируется «undefined». Однако я заметил, что удаление скобок цикла for следующим образом:
function range(num) {
var holder = [];
for(var i = 0; i <= num; i )
holder.push(i);
return holder;
}
console.log(range(40));
заставляет функцию работать правильно, и это здорово, за исключением того, что я не понимаю, почему функция теперь работает. Кто-нибудь может объяснить?
Комментарии:
1. потому что return должен быть вне скобок
2. потому что вы выполняете только одну итерацию в своем цикле со своими скобками
3. Правильный отступ помогает отладке кода.
for
Без скобок выполняется только циклholder.push()
части. Выполняетсяreturn
только после завершения цикла, как и должно быть.4. В первый раз у вас есть return в цикле for, во второй раз return выходит из цикла for.
5. Первый не должен регистрироваться
undefined
, но[0]
.
Ответ №1:
Он return
должен быть вне цикла, иначе он покинет функцию после первого нажатия
function range(num) {
var holder = [];
for(var i = 0; i <= num; i ) {
holder.push(i);
}
return holder; // must be outside
}
console.log(range(40));
ОДИН оператор в цикле не нуждается в скобках, но в любом случае рекомендуется иметь их. Вот приведенное выше с одним оператором.
function range(num) {
var holder = [];
for(var i = 0; i <= num; i ) holder.push(i);
return holder; // must be outside
}
console.log(range(40));
Комментарии:
1. Ах, я понимаю, поэтому цикл for не всегда требует скобок. И я возвращал значение до того, как цикл смог выполняться. Теперь это имеет смысл
Ответ №2:
Когда у вас есть скобки, вы выполняете обе строки
for(var i = 0; i <= num; i )
{
holder.push(i); // inside loop
return holder; // inside loop
}
Это означает return
, что после первого запуска и дальнейших итераций не происходит.
Когда у вас нет скобок, вы выполняете только первую строку в цикле
for(var i = 0; i <= num; i )
holder.push(i);
return holder; // this is outside loop
Вот почему без скобок выполняются все ваши операторы push, со скобками это происходит только один раз, потому что вы return
немедленно.
Ответ №3:
Потому что теперь ваш код читает:
for( var i=0; i<=num; i ) {
holder.push(i);
}
return holder;
for
Цикл (или if
оператор, while
цикл и т. Д.) Без фигурных скобок влияет только на следующую строку.
Ответ №4:
Вы возвращаетесь в цикл for, что означает, что он выполняется только один раз.
Когда вы снимаете скобки, он автоматически принимает следующую строку в качестве цикла, что означает, что оператор return теперь находится вне цикла.
Ответ №5:
В вашем первом коде вы завершаете работу функции в первом цикле:
function range(num) {
var holder = []; //1
for(var i = 0; i <= num; i ) { //2
holder.push(i); //3
return holder; //4 goes out of range function, instead, you should use a "break"
}
}
console.log(range(40));
Пока вы не ставите скобки для for
цикла, if
условия и т.д., «скобки» по умолчанию используются только для ПЕРВОЙ строки ниже :
Это :
function range(num) {
var holder = [];
for(var i = 0; i <= num; i )
holder.push(i);
return holder;
}
console.log(range(40));
выглядит так :
function range(num) {
var holder = [];
for(var i = 0; i <= num; i ) {
holder.push(i);
}
return holder;
}
console.log(range(40));