如何在多个 switch case 中使用用 let 声明的变量名?

MNA*_*MNA 5 javascript switch-statement

我正在尝试使用 switch 语句来执行任务。我在第一种情况下使用 let 声明了一个变量。但是当我尝试在第二种情况下访问它时,它显示“未捕获的引用错误:t未定义”

x = "20";
switch (x) {
  case '10':
    let t = 15;
    break;
  case '20':
    console.log(t);
}
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

未捕获的引用错误:t 未在 :6:21 定义

但如果我尝试在第二种情况下声明相同的变量

x = "20";
switch (x) {
  case '10':
    let t = 15;
    break;
  case '20':
    let t = 150;
    console.log(t);
}
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

未捕获的语法错误:标识符“t”已被声明

为什么会发生这种情况?如何在不使用 var 且不声明具有不同名称的变量的情况下解决此问题。提前致谢。

hol*_*gon 0

如果您在 case '10' 中声明变量,并且尝试访问 case '20' 中的变量,则会收到该错误,因为您尚未在 case '20' 范围内声明该变量。

如果您在不同情况下多次声明该变量,那么编译器将理解您正在尝试多次声明该变量;所以,它给了你这个错误。

这是应该的。您可以在 switch 语句之前声明它。因此,该变量在任何情况下都可以在开关下方使用。

x = "20";
    let t = 0;
    switch (x) {
        case '10':
        t = 15;
        break;
    case '20':
        t = 150;
        console.log(t);    
    }
Run Code Online (Sandbox Code Playgroud)

  • 但这并不能回答我的问题,为什么会发生这种情况 (4认同)
  • 是的,这可行,但如果您想限制每种情况下 t 的范围,则只需将其包装在块中。就像 case 变量:{ let t = ... } (3认同)
  • 我认为这是正确的答案...... (2认同)