# JavaScript语法(一)

# 表达式(expression)与语句(statement)

表达式通常产生一个值(如: 1, a(作为函数参数), 2+2, 4==2), 而语句则是负责执行(var a = 1).表达式可以写在语句里, 称之为expression statement(var a = MakeSomethingHappen()). 可语句不能写在表达式里.

if(var a = 1){} //错误
function(var a = 1){} //错误
1
2

# return关键字不能回车

function f(){
  return
  '我是返回值'
}

// undefined
1
2
3
4
5
6

# if语句不加括号

不加括号只会把下面的第一行当作if内的block.

var a = 1
if(a === 1)
  console.log(a)
  console.log('不管if里是否是真,我都执行')

//* 当a为1时, 打印值是:

// 1
// 不管if里是否是真,我都执行

//* 当修改a为2时, 打印值是:

// 不管if里是否是真,我都执行
1
2
3
4
5
6
7
8
9
10
11
12
13

# 浮点数相加造成死循环

var a = 0.1
while(a!==1){
  console.log(a)
  a = a + 0.1
}
1
2
3
4
5

直觉上10个0.1相加应该等于1, 但是js引擎返回的结果却不是 deadloop

# setTimeoutfor 循环

for(var i = 0; i<5;i++){
  setTimeout(()=>{
    console.log(i)
  })
}
//5
//5
//5
//5
//5
1
2
3
4
5
6
7
8
9
10

原因是setTimeout会在任务队列的末尾执行, 所以i是在累加到5后才开始执行setTimeout的.

# break, continue, label

break表明停止当前的for循环
continue表明停止当前这一轮的循环
label记得要把对象区分开