window.onload = function() {
document.getElementById('clickMe').onclick = runTheExample;
}
function runTheExample() {
alert('running the example');
}
对于id = clickMe的html输入按钮,这是onclick事件的简单事件处理程序。
在第2行中,为什么函数runTheExample
的调用不会紧跟()?我认为要调用一个函数,你必须在开/关括号中传递它所需的任何变量/对象,如果函数不期望任何东西,你仍然必须包括像runTheExample()
那样的开括号和右括号。
答案 0 :(得分:6)
document.getElementById('clickMe').onclick = runTheExample;
此处的目的不是调用 runTheExample(),而是将对函数runTheExample 的引用分配给 onclick 事件。
在内部,当触发 onclick 事件时,Javascript可以通过您在上面代码中提供的引用调用函数 runTheExample 。
var myFunction = function() { return 42; };
// Assigning the reference
myObject.callback = myFunction;
myObject.callback(); // Has the same effect as calling myFunction();
// Assigning by calling the function
myObject.callback = myFunction();
myObject.callback; // Returns 42
myObject.callback(); // Exception! Cannot call "42();"
这不是特定于Javascript的。通过引用传递函数有多种语言版本。
答案 1 :(得分:5)
仅使用括号调用(调用)函数。当您将其分配给onclick
时,您只是通过引用传递它。
为了更好地理解这一点,请考虑另一种声明函数的方法:
var runTheExample = function () {
alert('running the example');
}
无论你使用什么方法,runTheExample
都会包含对函数的引用(存在一些差异,比如在赋值之前函数引用不可用,但这是一个不同的故事)。
答案 2 :(得分:3)
函数是javascript中的对象。该行将click me元素的onclick属性设置为runTheExample函数,它不会立即调用该函数。
var a =runTheExample; //sets a to runTheExample
a(); //runs the runTheExample function
因此,当引用函数名而没有()时,它引用了函数对象,当你添加()时,它是对函数的调用,函数执行。
答案 3 :(得分:2)
在这种情况下,runTheExample函数被视为变量并被分配给onclick事件处理程序。您可以在函数名称后使用()来调用函数。如果你在这里添加它们,会发生的是runTheExample()在加载期间将被调用一次,显示一个警报,然后将一个空值分配给onclick处理程序。
答案 4 :(得分:2)
你没有在这里调用这个功能。您将该函数设置为事件处理程序,并且在触发事件之前,实际上不会调用该函数。你所写的内容引用了这个功能;这与实际调用它不同。
答案 5 :(得分:2)
它没有调用它,而是设置属性onclick
。当调用onclick()
时,它将运行您定义的函数。但请注意,this
的上下文将是调用它的对象(document.getElementById('clickMe')
)。
答案 6 :(得分:1)
因为它会将runTheExample
绑定到onclick
事件
当您添加()
时,它会触发该功能。