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 = 0for(; i<3; i++){ // 不在需要begin语句段alert(i)}// 假如你要移除setp语句段,没问题let i = 0for(; i<3;){alert(i++) // 这里需要++,不然无限循环了}
跳出循环
break
完全跳出循环。
从 * 位置,跳出while循环到 alert('Sum: '+sum)
let sum = 0while(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,0break outer}}console.log('done')
