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

原文地址:https://www.cnblogs.com/kangyy/p/13963984.html