JavaScript函数名alt()

JavaScript函数名alt(),javascript,html,function,Javascript,Html,Function,如果函数名为“alt”,我会得到错误:“alt不是函数”。其他名字都有用。代码如下: <!DOCTYPE HTML> <html> <head> </head> <body> <input type="button" value="click me" onclick="alt('dato',28);"/> <script type="text/javascript

如果函数名为“alt”,我会得到错误:“alt不是函数”。其他名字都有用。代码如下:

<!DOCTYPE HTML>
<html>
    <head>
    </head>
    <body>
        <input type="button" value="click me" onclick="alt('dato',28);"/>
        <script type="text/javascript">
            window.onload = function(){
                alt = function(name,age){
                    alert(name + "  " + age);
                }
            }
        </script>
    </body>
</html>

window.onload=函数(){
alt=函数(名称、年龄){
警报(姓名+“”+年龄);
}
}
请将函数名从“alt”更改为任何其他允许的名称,以确保其正常工作


有人能解释发生了什么吗?

发生这种情况的原因是在
onclick
属性中,
this
指的是附加了该属性的元素。现在,
alt
是一个标准属性名,它将作为按钮的未设置项开始,因为您没有在HTML中指定
alt
属性(并且
alt
属性对于
input
,不需要添加)

简而言之,
alt
不是指在脚本中设置的全局变量
window.alt
,而是指元素的
alt
属性,该属性从未设置开始

因此,当您运行
onclick=“alt('dato',28);”
时,它隐式地被解释为:
onclick=“this.alt('dato',28);“

要获取在全局范围中设置的
alt
,而不是作为每个HTML元素一部分的
alt
,您需要显式地进入全局范围,如下所示:

onclick="window.alt('dato',28);"

不能将html属性名称用作属性值中的函数,因为它引用属性值

比如说

<input type="button" value="click me" onclick="console.log(value)" />

问题是,由于使用了,全局函数
window.alt
HTMLInputElement.prototype.alt

此行为的解释如下所示:

词汇环境范围

  • 如果H是一个元素的,那么让作用域成为NewObjectEnvironment(文档,全局环境)的结果

    否则,H是对象的:let 范围是全球环境

  • 如果表单所有者不为null,则让作用域成为NewObjectEnvironment的结果(表单所有者,作用域)

  • 如果元素不为null,则将范围设为NewObjectEnvironment(元素,范围)的结果

  • 注意:NewObjectEnvironment()是在ECMAScript edition 5部分中定义的

    这意味着目标元素的作用域会影响全局作用域

    因此,你可以

    • 重命名你的函数

      函数替换(姓名、年龄){
      警报(姓名+“”+年龄);
      }

      我也在想类似的事情。现在一切都清楚了。谢谢
      <input type="button" value="click me" onclick="console.log(this.value)" />