【发布时间】:2012-02-20 12:57:47
【问题描述】:
可能重复:
javascript syntax: function calls and using parenthesis
t.onclick = doSomething
t.onclick = doSomething()
两个事件注册有什么不同?
有时我会混淆它们,添加括号似乎不会造成大问题?
【问题讨论】:
标签: javascript events event-handling
可能重复:
javascript syntax: function calls and using parenthesis
t.onclick = doSomething
t.onclick = doSomething()
两个事件注册有什么不同?
有时我会混淆它们,添加括号似乎不会造成大问题?
【问题讨论】:
标签: javascript events event-handling
第一个将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();
【讨论】:
doSomething() 最好命名为returnSomethingNowWhichWillDoSomethingThen() ;-)
引用对象的方式在 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; };
【讨论】: