我编写了以下函数,它应该记录一个从“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));
导致函数正常工作,这很好,除了我不明白为什么函数现在有效。谁能解释一下?
答案 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));