for循环中的switch case

今天写代码时遇到一个问题

var 没有块级作用域!

var 没有块级作用域!

var 没有块级作用域!

1
2
3
4
5
6
7
8
9
10
11
12
13
for (var i = 0; i < 3; i++) {
var a = '1'
switch (a) {
case '1':
for (var i=0;i<3;i++){

}
break
case '2':
break
}
console.log(i)
}

本来我想让

a=’1’ 时执行case ‘1’

a=’2’ 时执行case ‘2’

结果偏偏不执行case ‘2’

当然,业务比这复杂得多

经过调试:

  • 第一次循环i=0
  • 然后进入case ‘1’
  • i=4
  • 结束外层循环
  • 所以控制台打印4之后就结束了

实际上是个var没有块级作用域问题,

用let就可以解决,

但这种问题真正在实际复杂应用中就很难发现了,

JS基础真的是很重要,

以后能用let尽量不用var真的时太坑了

es6 精炼

let 和 const

  • let有块作用域
    • 在同一个作用域内,let声明的变量不能重复
    • var 定义的变量会提升
    • let 定义的变量不提升,不能在声明前使用
  • const 有块级作用域
    • 一旦赋值不能改变
    • 声明必赋值
    • let user = {}
      • const PERSON = user
      • user改变,PERSON不会报错,因为PERSON的值是个指针
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×

// tidio机器人助手