Javascript &引用;can';t创建覆盖全局属性的重复变量";
在Safari 10上获取此错误 当常量的名称与页面上任何元素的Javascript &引用;can';t创建覆盖全局属性的重复变量";,javascript,safari,ecmascript-6,Javascript,Safari,Ecmascript 6,在Safari 10上获取此错误 当常量的名称与页面上任何元素的id完全相同时发生 const abc = document.querySelector("#abc"); //err const abz = document.querySelector("#abc"); //no err var abc = document.querySelector("#abc"); //no err 这有什么原因吗? 我知道您可以通过window.abc访问元素,这是为什么的一部分吗 测试: const
id
完全相同时发生
const abc = document.querySelector("#abc"); //err
const abz = document.querySelector("#abc"); //no err
var abc = document.querySelector("#abc"); //no err
这有什么原因吗?我知道您可以通过window.abc访问元素,这是为什么的一部分吗 测试:
const alpha=document.querySelector('#alpha');
控制台日志(alpha);
这显然是Safari在声明与所选id属性同名的let/const变量时遇到的问题。我和你一样用const声明了一些变量,得到了同样的错误。改成了出租,但还是得到了。已更改为var,并已生效。必须将其链接到
同时,您可以用
var
替换const
,或者更改变量的名称(例如:_alpha)。Nathan的答案是正确的。我没有使用var,而是将const改为与id不同的case。所以
const Abc = document.querySelector("#abc");
还是很黑,只是另一种选择 (STP10.1)呃,那是JSFIDLE。尝尝生的?我会发布一个测试。刚刚在STP上试过,同样的错误。我可以用HTML复制,谢谢。如果在
setTimeout
回调中运行const alpha…
,则不会发生错误。它看起来像Safari中的临时绑定bug。我想这就是为什么小提琴没有击中它。@joews但是setTimeout
中的const
将作用于超时后调用的回调函数,而不是全局作用域,因此它与这个问题没有真正的关系。谢谢,你的回答解决了我今天的Safari问题。我想让大家知道我更讨厌狩猎而不是IE!哇!这太可怕了。。。一年后,仍然没有修复。。。safari会成为新的IE吗???我没话说了。只是哇!快速搜索并替换const到var修复了它。
const Abc = document.querySelector("#abc");