为什么我的for循环只在循环没有括号时才推送到数组

时间:2014-06-23 08:00:30

标签: javascript arrays 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));

这改为记录“未定义”。我注意到,删除for循环的括号如下:

function range(num) {
    var holder = [];
    for(var i = 0; i <= num; i++)
    holder.push(i);
    return holder;
}
console.log(range(40));

导致函数正常工作,这很好,除了我不明白为什么函数现在有效。谁能解释一下?

5 个答案:

答案 0 :(得分:3)

如果有括号,则执行两行

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

这就是为什么没有括号所有的推送语句都会执行,括号只会因为你return而立即发生一次。

答案 1 :(得分:3)

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));

循环中的SINGLE语句不需要括号,但建议无论如何都要使用它们。以上是单一陈述。

function range(num) {
  var holder = [];
  for(var i = 0; i <= num; i++) holder.push(i);
  return holder; // must be outside
}
console.log(range(40));

答案 2 :(得分:1)

因为现在你的代码是:

for( var i=0; i<=num; i++) {
    holder.push(i);
}
return holder;

没有大括号的for循环(或if语句,while循环等)仅影响下一行。

答案 3 :(得分:1)

你在for循环中返回,这意味着它只运行一次。

当你删除括号时,它会自动将下一行作为循环,这意味着return语句现在在循环之外。

答案 4 :(得分:1)

在第一个代码中,您在第一个循环中退出该函数:

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条件等添加括号,但是&#34;括号&#34;默认情况下仅适用于以下FIRST行:

这:

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));