switch case的作用域

在switch case中定义变量报错,例如:

let num = 1

switch(num){

  case 1:

    let a = 1

    break

  default:

    console.log(a)   //1

}

 

再例如

switch(num){

  case 1:

    let a = 1

    break

  case 2:

    let a = 2    

    break  

  default:

    console.log(a)   //报错 提示has already been declared

}

 

看出每个case不会构成单独的作用域,整个的switch是一个作用域。

let num = 1

switch(num){

  case 1:

    a = 1

    break

  default:

    console.log(a)   //1    全局变量绑在window上,所以可以打印

}

但是:

let num = 2

switch(num){

  case 1:

    let a = 1

    break

  case 2:

    a = 2

    break

}

这种情况会报a未定义,因为case1并未执行,如果num改为1 ,则不会报错。

问题无法解决,换成了if-else

posted on 2020-11-12 15:03  html123  阅读(709)  评论(0编辑  收藏  举报