while循环
1.语法
当…时
- while(表达式){ 语句 }
- 判断表达式的真假
- 当表达式为真,执行语句
- 当表达式为假,执行后面的语句
- 执行完再次判断表达式的真假
2.奇怪的例子
死循环案例:
当 a 不等于 1 时,打印出 a,且 a = a+1
死循环原因:浮点数不精确
var a = 0.1
while(a !== 1){
console.log(a)
a = a + 0.1
}
for循环
1.语法糖
- for 是 while 循环的方便写法
- 方便的地方:
while的几个部分少一个都不行
var a = 0.1 //初始化
while(a !== 1){ //判断
console.log(a) //循环体
a = a + 0.1 //增长
}
2.语法
- 结构
for(语句1;表达式2;语句3){//初始化;判断;增长
循环体
}
- 先执行一次语句1
- 然后判断表达式2
- 如果为真,执行循环体,然后执行语句3(注意先后顺序)
- 如果为假,直接退出循环,执行后面的语句
3.重要的栗子
例子1:
例子2
for(let i= 0; i<5;i++){
setTimeout(()=>{console.log(i)})
}
2.1为什么运行结果会有5个5?
答:
- setTimeout表示过一会执行,虽然跳过了这一句,但后面一定会执行,这里 i 从 0-4一共5次,因此是5个
- “过一会”表示把循环执行完了之后执行,则当循环执行完时,i=5
- 因此是5个5
2.2 如何解决这个问题,正常打印出 ·0,1,2,3,4
答:把var
改成let
,是JS为了满足一些程序员的思想,单独开辟的运行理念
break和continue
退出当前所有循环 V.S. 退出当前一次循环
- break退出整个循环,但只会退出离它最近的一个for
label标签
foo: { //foo是一个标签,表示这个代码块
console.log(1);
break foo;//跳出foo这个代码块
console.log('本行不会输出');//上面就已经退出了
}
console.log(2);
最终会输出;1 2
{
foo: 1;
}
表示一个代码块,代码块里面有一个标签,标签label的内容是1,这不是一个对象
var a = {
foo: 1;
}
这是一个对象
推荐书籍:你不知道的JavaScript