Javascript 为什么可以';onclick处理程序不能设置为本机函数吗?

Javascript 为什么可以';onclick处理程序不能设置为本机函数吗?,javascript,Javascript,当一个元素的onclick事件处理程序直接设置为另一个元素的内置函数click时,即使在使用用户定义的中间函数时该事件仍能正常工作,该事件也不会自动触发 类似地,当将onclick事件处理程序直接设置为内置函数alert时,它会导致TypeError:非法调用,即使它在使用用户定义的中间函数时也会起作用 奇怪的是,当onclick事件处理程序直接设置为console.log时,它会按预期工作,尽管这也是一个内置函数 单击和警报会导致直接分配行为异常,这是怎么回事?为什么添加一个只转发调用的匿名函

当一个元素的
onclick
事件处理程序直接设置为另一个元素的内置函数
click
时,即使在使用用户定义的中间函数时该事件仍能正常工作,该事件也不会自动触发

类似地,当将
onclick
事件处理程序直接设置为内置函数
alert
时,它会导致
TypeError:非法调用
,即使它在使用用户定义的中间函数时也会起作用

奇怪的是,当
onclick
事件处理程序直接设置为
console.log
时,它会按预期工作,尽管这也是一个内置函数

单击
警报
会导致直接分配行为异常,这是怎么回事?为什么添加一个只转发调用的匿名函数会有什么不同

const div1=document.getElementById(“1”);
const div2=document.getElementById(“2”);
const div3=document.getElementById(“3”);
const div4=document.getElementById(“4”);
const div5=document.getElementById(“5”);
const div6=document.getElementById(“6”);
常量指示符=document.getElementById(“指示符”);
indicator.onclick=函数(){
如果(indicator.style.background==“蓝色”){
indicator.style.background=“绿色”;
}否则{
indicator.style.background=“蓝色”;
}
};
div1.onclick=函数(事件){
指示器。单击(事件);
};
div2.onclick=indicator.click;
div3.onclick=函数(事件){
警报(事件);
};
div4.onclick=警报;
div5.onclick=函数(事件){
console.log(事件);
};
div6.onclick=console.log
#指示器{
高度:100px;
宽度:100px;
}
div{
光标:指针;
文字装饰:下划线;
}
通过功能设置指示器颜色(工作)
直接设置指示器颜色(静默失败)
通过功能触发警报(工作)
直接触发警报(失败并出错)
通过功能触发控制台日志(工作)
直接触发控制台日志(工作)

您不能这样调用警报,因为它不再在窗口上下文中执行。它在您单击的div的上下文中执行。使用bind,您可以将上下文更改回窗口,它将正常工作

const div4=document.getElementById(“4”);
div4.onclick=alert.bind(窗口)
#指示器{
高度:100px;
宽度:100px;
}
div{
光标:指针;
文字装饰:下划线;
}

直接触发警报(错误导致失败)
我不知道您实际想做什么。。。。我觉得我不是唯一的一个。
alert()
是一种方法。message参数可以为空,但不带括号。您不调用函数,而是调用函数的引用。这个问题解释得很好:@epascarello我最初编写了代码
div2.onclick=indicator.click
就是这样做的:当一个DOM元素被单击时,触发对另一个DOM元素的单击。我感到困惑的是,如果不将它包装到另一个函数中,它为什么不能工作,这就是为什么我问这个问题。我还尝试使用其他内置功能(
alert
console.log
)进行一些调查,但这些功能并没有说明具体情况。谢谢!我忘记了简单地指定
指示符。单击
窗口。alert
不会导致它绑定,并且无论调用实际发生在哪里,绑定都会发生在不同的上下文中。