在javascript中t.onclick = doSomething和t.onclick = doSomething()之间的区别是什么?

时间:2012-02-20 12:57:48

标签: javascript events event-handling

  

可能重复:
  javascript syntax: function calls and using parenthesis

 t.onclick = doSomething 

 t.onclick = doSomething()

两个事件注册之间有什么不同?

有时候我会混淆他们,添加一个括号似乎不会造成大问题?

2 个答案:

答案 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; };