javascript函数名称不能设置为click?

mic*_*123 9 html javascript

下面是我的代码,它不起作用.将"click()"重命名为"click1()"后,它有效,为什么?

<html>
<head>
    <title></title>
    <script type="text/javascript">
        function click() {
            document.getElementById("content").innerHTML = "abc";
        }
    </script>
</head>

<body>
    <button onclick="click()">try it</button><br />
    <div id="content"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Poi*_*nty 13

"onfoo"处理程序属性的字符串值被解释为处理程序函数的主体.换句话说,就好像传递属性的字符串值一样,new Function("event", str)结果是使用的处理函数.

此外,该功能的词法范围如下所示,取自HTML5规范(我仅以浏览器行为的综合描述的方式参考):

词法环境范围
*让Scope成为NewObjectEnvironment(元素的Document,全局环境)的结果.
*如果元素具有表单所有者,则让Scope为NewObjectEnvironment(元素的表单所有者,Scope)的结果.
*让Scope成为NewObjectEnvironment(元素的对象,Scope)的结果.

因此,好像最多有两个嵌套的with块隐式包裹在代码中.因此,在这种情况下,效果是调用这个:

var handler = new Function("event", "with (this) { click(); }");
Run Code Online (Sandbox Code Playgroud)

因为DOM元素上有一个"click"方法,所以<button>该函数是由处理程序调用的,而不是由script标签建立的全局函数.如果"onclick"属性设置为"window.click();" 然后页面正常工作.


Mad*_*uja -1

click() 是 javascript 内置的按钮对象。