js中的switch(js中switch用法举例)

图片授权基于 www.pixabay.com 相关协议

ECMAScript 6 后,JavaScript 实现了「块级作用域」,看极客时间上的课程后发现,「switch」的作用域还有一些需要注意的地方。
switch(表达式) {   case n:      代码块      break;   case n:      代码块      break;   default:      默认代码块}

break 关键词:跳出 switch 代码块;

default 关键词:无 case 匹配项的时候,执行;


switch 的作用域只有一个,包含里面 case 语句,都属于同一个作用域。

如果里面声明 let 变量,可就要注意了。

首先 let 声明的变量只能在「当前作用域」有效;并且使用 let 声明之前,该变量不可用,这在语法上称「暂时性死区」;所以 let 声明的变量,一定要在声明后使用;

var x = 100,c = \\\'b\\\';switch (c) {  case \\\'a\\\':    let x = 200;    console.log(x);    break;  case \\\'b\\\':    x = 300;    console.log(x);    break;}//Cannot access \\\'num\\\' before initialization//未初始化之前不能使用

走逻辑 b ,说明 let x 并没有初始化;

var x = 100,c = \\\'b\\\';switch (c) {  case \\\'a\\\':    let x = 200;    console.log(x);    break;  case \\\'b\\\':    let x = 300;    console.log(x);    break;}//Identifier \\\'x\\\' has already been declared//标识符已被声明过

走逻辑 b ,但标识符已经被声明了。

那第一个 case 里面的 let x = 200,到底在执行什么?

那就要引申出 let 的暂时性死区。就是说,只要一进入当前作用域,需要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

虽然第一个 case 的 let x = 200 没有执行,但是 x 是存在作用域中的,因为没有词法绑定,所以不能被获取,只有声明它的时候才能获取和使用。

所以,我们用 let 的特性来证明了 switch 的作用域问题,无论多少个 case 都在一个作用域里。

如果非要在 case 里区分作用域,可以用 {} 号来处理。

switch (c) {  case \\\'a\\\':{    //单独作用域  }  case \\\'b\\\':{    //单独作用域  }}

参考资料:

[1]极客时间《JavaScript 核心原理解析》

[2]http://www.ecma-international.org/ecma-262/6.0/#sec-let-and-const-declarations

[3]http://es6.ruanyifeng.com/#docs/let

[4]https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch


推荐阅读

JavaScript 装箱和拆箱

Ajax 如何下载文件

JavaScript 表达式和运算符

原创文章,作者:小道研究,如若转载,请注明出处:https://www.sudun.com/ask/34565.html

(0)
小道研究's avatar小道研究
上一篇 2024年4月20日 下午3:36
下一篇 2024年4月20日 下午3:38

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注