【发布时间】:2016-10-17 16:14:36
【问题描述】:
在 Safari 10 上出现此错误
当 const 的名称与页面上任何元素的 id 完全相同时发生。
const abc = document.querySelector("#abc"); //err
const abz = document.querySelector("#abc"); //no err
var abc = document.querySelector("#abc"); //no err
这是有原因的吗?
我知道您可以通过 window.abc 访问这些元素,这是部分原因吗?
测试:
<!doctype html>
<html><body>
<div id="alpha"></div>
<script>
const alpha = document.querySelector('#alpha');
console.log(alpha);
</script>
</body></html>
【问题讨论】:
-
Can't replicate (STP 10.1)
-
错了,这就是 jsfiddle。试试生的?我会发布一个测试。
-
刚试了STP,同样的错误。
-
我可以用 HTML 复制,谢谢。如果您在
setTimeout回调中运行const alpha...,则不会发生错误。它看起来像 Safari 中的时间绑定错误。我想这就是为什么小提琴没有击中它的原因。 -
@joews 但是
setTimeout中的const的作用域是超时后调用的回调函数,而不是全局作用域,所以它与这个问题并没有真正的关系。
标签: javascript safari ecmascript-6