添加javascript函数的HTMLDOM

添加javascript函数的HTMLDOM,javascript,dom,Javascript,Dom,这两者的区别是什么: document.form1.colorButton.onclick = setBGColor;` 及 ` 将其添加到属性时有()但使用DOM no()时没有()。为什么会这样 任何对官方文档的引用都会有所帮助。在.onclick版本中,您直接将对JS函数的引用分配给.onclick属性。提供括号将是错误的,因为这将导致立即调用函数并将其结果分配给事件处理程序 在“inline”DOM0方法中,生成的代码更像: document.form1.colorButton.on

这两者的区别是什么:

document.form1.colorButton.onclick = setBGColor;`

`
将其添加到属性时有()但使用DOM no()时没有()。为什么会这样


任何对官方文档的引用都会有所帮助。

.onclick
版本中,您直接将对JS函数的引用分配给
.onclick
属性。提供括号将是错误的,因为这将导致立即调用函数并将其结果分配给事件处理程序

在“inline”DOM0方法中,生成的代码更像:

document.form1.colorButton.onclick = function onclick(event) {
    setBGColor();
}
事实上,如果您使用内联方法,然后查看
document.form1.colorButton.onclick的值,这正是您在Chrome控制台中看到的


为了进一步解释,将
onclick
属性的主体包装在一个新函数中,然后将对该函数的引用指定给属性。必须提供括号,否则将无法调用
setBGColor()
函数。

第一个是函数,第二个是字符串。使用
eval()
@blgt对字符串求值:它不使用eval。字符串将成为新函数对象的主体。尝试在控制台中键入setBGColor,您将看到它包含setBGColor()。@斜视公平点,但除非您关心调试或试图利用此
的某些用法,否则它是等效的。只是更容易用字符串来思考。
document.form1.colorButton.onclick = function onclick(event) {
    setBGColor();
}