【问题标题】:'let block' is only available in Mozilla JavaScript extensions (use moz option)'let block' 仅在 Mozilla JavaScript 扩展中可用(使用 moz 选项)
【发布时间】:2016-09-02 12:50:59
【问题描述】:

我正在尝试下面的简单代码,但它抛出了以下错误

'let block' 仅在 Mozilla JavaScript 扩展中可用(使用 moz 选项)

let (a=20,b,c) {
  console.log(a,b,c);
}

这个错误的原因是什么?

【问题讨论】:

  • 取决于你想要做什么。您认为该代码的用途是什么?

标签: javascript ecmascript-6 mozilla


【解决方案1】:

该语法不是 ECMAScript-6。 let 的标准用法如下所示:

{
  let a=20, b, c;
  console.log(a,b,c);
}

所以不管那个语法是什么,它显然是一个 Mozilla 扩展,只有在编写特定于 Mozilla 的代码时才可用。

【讨论】:

    【解决方案2】:

    let block 是非标准化的,是 Gecko 特有的(它也是 deprecated and removed)。

    JSHint 需要使用 moz option 启用 Gecko-only 功能。

    执行此操作的标准方法是

    {
      let a=20,b,c;
      console.log(a,b,c);
    }
    

    【讨论】:

    • 这里的大括号有什么用? JS 没有块作用域吧?
    • @evolutionxbox ES6 可以。 let a = 1; { let a = 2 } 等于 ES5 中的 var a = 1; (function () { var a = 2 })()
    • 只适用于 let 和 const?或者也适用于 vars?
    • @evolutionxbox let 和 const 是块作用域且非提升的。 var 保留旧的变量行为。检查 Babel 和 Typescript 如何转译代码,这提供了一个很好的视角。
    • var 的函数级范围被认为是令人困惑和限制的;块级作用域更加合乎逻辑和灵活。但 ECMA 不想破坏向后兼容性。所以var 仍然以相同的方式工作,但他们添加了一个新关键字let 来执行块范围变量。他们同时添加了const,并赋予它let 风格的行为,因为如前所述,它被认为更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多