while

先判断条件成不成立,在决定执行。

  1. while (condition) {
  2. // 循环体
  3. }

do…while

先执行,在判断是否成立。

  1. do {
  2. // 循环体
  3. } while (condition)

for 循环(执行顺序注意)

最常用,也迷糊的。

  1. for(begin; condition; step) {
  2. // ...body循环体...
  3. }
  1. begin 在进入循环之前,先执行,仅1次。
  2. condition判断,false则停止。
  3. 循环体 body 执行
  4. 执行step,在每次循环体迭代后执行

内联变量声明

变量仅循环体内可见

  1. for(let i = 0; i < 3; i++){
  2. alert(i);
  3. }
  4. alert(i) // 这里不可见i
  1. let i = 0;
  2. for(i = 0; i < 3; i++) {
  3. alert(i)
  4. }
  5. alert(i) // 3,可见。i在循环体外。

省略语句段

骚操作,让人看不懂。

  1. // 假如你要省略begin语句段
  2. let i = 0
  3. for(; i<3; i++){ // 不在需要begin语句段
  4. alert(i)
  5. }
  6. // 假如你要移除setp语句段,没问题
  7. let i = 0
  8. for(; i<3;){
  9. alert(i++) // 这里需要++,不然无限循环了
  10. }

跳出循环

break

完全跳出循环。
* 位置,跳出while循环到 alert('Sum: '+sum)

  1. let sum = 0
  2. while(true) {
  3. let value = +prompt('enter a numnber', '')
  4. if(!value) break; // (*)
  5. sum+=value;
  6. }
  7. alert('Sum: '+sum)


迷之return(注意)

总想着 for 循环里可以使用 return 语句退出,之前有个面试还遇到了该问题,回答错误了。
return 只能出现在函数体里,所以循环体里使用会报错,不合法的return语句。

  1. for(let i = 0; i < 3; i ++){
  2. if(i === 2){
  3. return // Uncaught SyntaxError: Illegal return statement
  4. }
  5. }
  6. // 你应该使用break

继续下一次迭代

continue

跳出本次循环而已,下次循环继续。

  1. for(let i = 0; i < 10; i ++) {
  2. if(i % 2 === 0) continue;
  3. alert(i) // 1 3 5 7 9
  4. }

利用标签,跳出嵌套循环

比如打印(0,0)到 (3,3)

  1. for(let i = 0; i < 3; i++) {
  2. for(let j = 0; j < 3; j++){
  3. console.log(i, j)
  4. // 在这里如何退出
  5. break // 只退出内层循环。外层依旧。会打印0,0 1,0 2,0
  6. }
  7. }

你需要一个 label ,而且只允许在循环内部使用break/continue跳出,label必须在跳出代码上方。

  1. outer: for(let i = 0; i < 3; i++){
  2. for(let j = 0; j < 3; j++) {
  3. console.log(i, j) // 只打印0,0
  4. break outer
  5. }
  6. }
  7. console.log('done')