js中跳出循环return和break的区别

更新时间: 2022-05-05 13:40:06

使用for循环的时候经常会遇到需要跳出循环或者终止循环的情况,那么break,return,continue究竟有什么不同,它们都有什么效果呢。

# break

break 语句用于退出 switch 语句或循环语句(for, for ... in, while, do ... while)。

  • 当 break 语句用于 switch 语句中时,会跳出 switch 代码块,终止执行代码。

  • 当 break 语句用于循环语句时,会终止执行循环,并执行循环后代码(如果有的话)。

  • break 语句同样可用于可选的标签引用,用于跳出代码块

# break语句终止循环

var i = 0;
while (i < 5) {
    console.log(i)
    i++;
    if (i == 3) {
        break;
    }
}
1
2
3
4
5
6
7
8

执行结果:

0
1
2
1
2
3

for循环中使用break会终止后面的循环,后面的代码不会再执行了

# break语句终止嵌套循环

for(let i = 0;i<5;i++) {
    console.log("i=",i)
    for(let j = 0;j < 5;j++) {
        console.log("j=",j)
        if(j == 3) {
            break;
        }
    }
}
1
2
3
4
5
6
7
8
9

这种情况不会终止掉外层循环,内层循环会被终止

正确的方式是使用break + label

flag:     
for(let i = 0;i<5;i++) {
    console.log("i=",i)
    for(let j = 0;j < 5;j++) {
        console.log("j=",j)
         if(j == 2) {
            break flag;
        }
    }
}
1
2
3
4
5
6
7
8
9
10

执行结果:

i= 0
j= 0
j= 1
j= 2
1
2
3
4

可以看到使用break+label的方式,将外层循环中断掉了

break可以结束掉forEach,map,filter,for...in这种循环吗

答:只有for...in可以,其它的都会有语法错误。

# continue

continue 用于跳过循环中的一个迭代,并继续执行循环中的下一个迭代。

continue 与 break 语句的区别是, break 是结束整个循环体,continue是结束单次循环。

但是,在执行 continue 语句时,表现出了两种不同类型的循环:

  • 在 while 循环中,会先判断条件,如果条件为 true,循环再执行一次。
  • 在 for 循环中,自增长表达式 (如:i++) 会先计算,然后再判断条件是否为true,再决定是否执行迭代。
var i = 0;
while (i < 5) {
    i++;
    if (i == 3) {
        continue;
    }
    console.log(i)
}
1
2
3
4
5
6
7
8

执行结果:

1
2
4
5
1
2
3
4

# return

return语句用于指定函数返回的值。return语句只能出现在函数体内,出现在代码中的其他任何地方都会造成语法错误。

前面提到的结束多重循环的问题,用return也可以解决。

(function (){
    for(let i = 0;i<5;i++) {
        console.log("i=",i)
        for(let j = 0;j < 5;j++) {
            console.log("j=",j)
            if(j == 2) {
                return
            }
        }
    }
})()
1
2
3
4
5
6
7
8
9
10
11

执行结果:

i= 0
j= 0
j= 1
j= 2
1
2
3
4