Javascript 如何在多个开关案例中使用let声明的变量名?
我正在尝试使用switch语句执行任务。在第一种情况下,我使用let声明了一个变量。但当我在第二种情况下尝试访问它时,它会说“uncaughtreferenceerror:t未定义”Javascript 如何在多个开关案例中使用let声明的变量名?,javascript,switch-statement,Javascript,Switch Statement,我正在尝试使用switch语句执行任务。在第一种情况下,我使用let声明了一个变量。但当我在第二种情况下尝试访问它时,它会说“uncaughtreferenceerror:t未定义” x=“20”; 开关(x){ 案例“10”: 设t=15; 打破 案例‘20’: 控制台日志(t); }如果在案例“10”中声明变量,并且在案例“20”中尝试访问变量,则会出现该错误,因为您没有在案例“20”的范围内声明变量 如果您在不同的情况下多次声明变量,那么编译器将理解您试图多次声明变量;所以,它给了你这个
x=“20”;
开关(x){
案例“10”:
设t=15;
打破
案例‘20’:
控制台日志(t);
}
如果在案例“10”中声明变量,并且在案例“20”中尝试访问变量,则会出现该错误,因为您没有在案例“20”的范围内声明变量
如果您在不同的情况下多次声明变量,那么编译器将理解您试图多次声明变量;所以,它给了你这个错误 这就是它应该是的。在switch语句之前声明它。因此,该变量在开关下方的任何情况下都是可用的
x=“20”;
设t=0;
开关(x){
案例“10”:
t=15;
打破
案例‘20’:
t=150;
控制台日志(t);
}
Declarelet t代码>在switch语句上方。在案例10中初始化t,因此在案例20中它不可用(作用域),因此case
s不算作单独的块,这很有趣,当您还想使用现代语法(如let
和const
)时,这将使事情难以处理。虽然您可以在开关
之前声明变量一次,但我建议尽可能完全放弃开关
(可能使用由x
s索引的对象,其属性是关联的值)“为什么会发生这种情况?”-在第一种情况下,应该很明显:t
在20
的情况下从未初始化过。这是因为您在同一函数范围内重新声明了let
语句。这将引发语法错误。上面的文件提到了这个确切的案例。如果希望在每种情况下都有一个新的let
语句,则使用块语法代替case:{let a;}
而不是case:let a代码>。这样,您将创建单独的作用域。但这并不能回答我的问题,这是为什么happening@ImMNA你能解释一下这是如何将t
置于全球范围内的吗?您是否试图在块范围(switch
语句)中声明变量?我认为这是正确的答案…@stealthteninja我假设switch
语句位于顶层,在这种情况下,分配给在顶层声明的t
将有效地使t
成为全局的。是的,这会起作用,但如果您想限制每种情况下t的范围,只需将其包装在块中。如case变量:{let t=…}