while
先判断条件成不成立,在决定执行。
while (condition) {
// 循环体
}
do…while
先执行,在判断是否成立。
do {
// 循环体
} while (condition)
for 循环(执行顺序注意)
最常用,也迷糊的。
for(begin; condition; step) {
// ...body循环体...
}
- begin 在进入循环之前,先执行,仅1次。
- condition判断,false则停止。
- 循环体
body
执行 - 执行step,在每次循环体迭代后执行。
内联变量声明
变量仅循环体内可见
for(let i = 0; i < 3; i++){
alert(i);
}
alert(i) // 这里不可见i
let i = 0;
for(i = 0; i < 3; i++) {
alert(i)
}
alert(i) // 3,可见。i在循环体外。
省略语句段
骚操作,让人看不懂。
// 假如你要省略begin语句段
let i = 0
for(; i<3; i++){ // 不在需要begin语句段
alert(i)
}
// 假如你要移除setp语句段,没问题
let i = 0
for(; i<3;){
alert(i++) // 这里需要++,不然无限循环了
}
跳出循环
break
完全跳出循环。
从 *
位置,跳出while循环到 alert('Sum: '+sum)
let sum = 0
while(true) {
let value = +prompt('enter a numnber', '')
if(!value) break; // (*)
sum+=value;
}
alert('Sum: '+sum)
迷之return(注意)
总想着 for
循环里可以使用 return
语句退出,之前有个面试还遇到了该问题,回答错误了。return
只能出现在函数体里,所以循环体里使用会报错,不合法的return语句。
for(let i = 0; i < 3; i ++){
if(i === 2){
return // Uncaught SyntaxError: Illegal return statement
}
}
// 你应该使用break
继续下一次迭代
continue
跳出本次循环而已,下次循环继续。
for(let i = 0; i < 10; i ++) {
if(i % 2 === 0) continue;
alert(i) // 1 3 5 7 9
}
利用标签,跳出嵌套循环
比如打印(0,0)到 (3,3)
for(let i = 0; i < 3; i++) {
for(let j = 0; j < 3; j++){
console.log(i, j)
// 在这里如何退出
break // 只退出内层循环。外层依旧。会打印0,0 1,0 2,0
}
}
你需要一个 label
,而且只允许在循环内部使用break/continue跳出,label必须在跳出代码上方。
outer: for(let i = 0; i < 3; i++){
for(let j = 0; j < 3; j++) {
console.log(i, j) // 只打印0,0
break outer
}
}
console.log('done')