Safari - SyntaxError:无法两次声明let变量

时间:2017-02-25 00:27:51

标签: javascript google-chrome safari ecmascript-6

这是我以前从未见过的错误。

这是一个简单的复制品:https://jsfiddle.net/jakelauer/qr0ysmst/3/

const x = myVar => {

  console.log(myVar);

  for(let myVar of [1,2,3]){
    console.log(myVar);
  }

};

x(10);

Chrome中的输出:10123
Safari中的输出:SyntaxError: Cannot declare a let variable twice: 'myVar'.

想法?这是Safari中的错误吗?

编辑 - 值得注意的是,我不会故意这样做。我注意到它是因为我使用ASP.NET捆绑和放大器缩小系统,该系统就这样做了(所以我的网站在Safari中破了)

编辑2 - 有趣的是,这适用于两种浏览器

let x = 10;

for(let x of [1,2,3])
{
    console.log(x);
}

https://jsfiddle.net/jakelauer/aw37pd2s/1/

2 个答案:

答案 0 :(得分:4)

看起来这是一个Safari漏洞。我提交了一份错误报告。

答案 1 :(得分:0)

提到了“影子”变量,但这种情况让我感到困惑:

enter image description here

我在循环内重用 key 并“隐藏”函数的参数。

我能够得到这两个错误: cannot declare a const variable twice 要么 cannot declare a let variable twice 通过更改 for 循环中的声明。

所以对我来说修复很容易 - 只需将循环的 const key 更改为 const k