是' slot' ECMAScript较新版本中的保留字?

时间:2016-09-12 13:44:18

标签: javascript google-chrome ecmascript-6

Google Chrome版本53.0.2785.101(64位)存在问题。我尝试运行一个简单的html文件,它会抛出错误' slot.testFun不是一个函数'当我使用“' slot'。

这个词时
<html>
<head>
    <title>TEST</title>
</head>
<body>
    <a href="#" onclick="slot.testFun();">Click Here</a>

    <script type="text/javascript">
        var slot = {
            testFun: function(){
                console.log('clicked');
            }
        }
    </script>
</body>
</html>

我们的代码中没有与此变量冲突。它只是浏览器,不允许在最新版本中使用变量名称。

如果你使用除了&#39; slot&#39;之外的任何其他名称,它可以正常工作。

1 个答案:

答案 0 :(得分:7)

这不是ECMAScript问题,而是DOM问题。

slot attribute有相应的slot属性和onclick attributes do stupid things with with,因此您实际上正在调用this.slot.testFun(),因为它找到slot(默认为空字符串)在它到达正确的范围之前。

slot是DOM的新增功能,slot支持是Chrome 53中的新功能。它不会出现在Chrome 52中,也可能无法进入其他浏览器的最新版本。

解决方案:避免内在事件属性。用DOM绑定事件处理程序。这可以保护您免受他的冲突和未来的证明,从未来添加到DOM。

<a href="#">Click Here</a>

<script type="text/javascript">
    var slot = {
        testFun: function(){
            console.log('clicked');
        }
    }
    document.querySelector("a").addEventListener("click", slot.testFun);
</script>