在es6中的case语句后,花括号在switch语句中做了什么?

时间:2017-02-27 08:29:31

标签: javascript scope ecmascript-6 switch-statement

有什么区别:

(UIApplication.shared.delegate as? AppDelegate)?.saveContext()

switch (expression) {
    case:
      somethings;
      break;
}

起初我以为我可以像这样返回一个对象字面值,但事实证明这是一个语法错误。实际上有什么区别?

另一个问题的例子: How to pass switch statement as function argument in Javascript ES6?

2 个答案:

答案 0 :(得分:45)

以这种方式使用的大括号建立了自己的块范围,您可以在其中定义本地let变量或const常量:



switch (false) {
    case true: {
      let x = "bar";
      console.log(x);
      break;
    }

    case false: {
      let x = "baz";
      console.log(x);
      break;
    }
}




示例将在没有嵌套块作用域的情况下抛出,因为在Ecmascript 2015中,不允许在同一作用域内使用具有相同标识符的多个let / const声明。

请注意,switch语句本身会创建一个块作用域,即您是否使用嵌套块作用域,let / const声明switch并且#39} ; t泄漏到父范围。

但是,在switch的上下文中,花括号也是纯粹装饰性的,用于在视觉上突出显示各个case分支的块。

答案 1 :(得分:2)

您必须使用大括号:

  1. 创建具有相同名称的更多块范围变量(const / let)时
    • 根据规范MDN web docs
    • 错误:语法错误:标识符'variablename'已经声明
  2. 在默认设置中使用 eslint 并使用甚至一个人时(const / let