可能重复:
javascript syntax: function calls and using parenthesis
t.onclick = doSomething
t.onclick = doSomething()
两个事件注册之间有什么不同?
有时候我会混淆他们,添加一个括号似乎不会造成大问题?答案 0 :(得分:8)
第一个将doSomething
的引用分配给onclick
属性。第二个分配doSomething
的返回值。除非doSomething
返回一个函数,否则这不太可能是你想要的。
分配参考:
function doSomething() {
console.log("something");
}
//When t is clicked, "something" is logged
t.onclick = doSomething;
指定返回值:
function doSomething() {
console.log("something");
}
//"something" is logged immediately. When clicked, nothing happens
t.onclick = doSomething();
分配返回的函数:
function doSomething() {
return function() {
console.log("something");
};
}
//When t is clicked, "something" is logged
t.onclick = doSomething();
答案 1 :(得分:0)
引用对象的方式在JS中意味着很多。 doSomething;
和doSomething();
之间存在差异,因为第一个引用函数,后者引用函数的return value
。让我们看看这个例子,你会明白我的意思。 doSomething();
不仅调用函数,还返回函数的return value
:
function doSomething() {
return 5;
}
console.log(doSomething); // function() { return 5; }
console.log(doSomething()); // 5
所以t.onclick = doSomething;
非常像t.onclick = function() { return 5; };