javascript 中的 t.onclick = do Something 和 t.onclick = do Something() 有啥区别? [复制]

Posted

技术标签:

【中文标题】javascript 中的 t.onclick = do Something 和 t.onclick = do Something() 有啥区别? [复制]【英文标题】:What's the differences between t.onclick = doSomething and t.onclick = doSomething() in javascript? [duplicate]javascript 中的 t.onclick = do Something 和 t.onclick = do Something() 有什么区别? [复制] 【发布时间】:2012-02-20 12:57:47 【问题描述】:

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

 t.onclick = doSomething 

 t.onclick = doSomething()

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

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

【问题讨论】:

【参考方案1】:

第一个将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() ;-)【参考方案2】:

引用对象的方式在 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; ;

【讨论】:

以上是关于javascript 中的 t.onclick = do Something 和 t.onclick = do Something() 有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Node中的JavaScript和浏览器中的JavaScript的区别

JavaScript中的对象

[JavaScript]JavaScript中的Array

javascript获取html表单中的值?

JavaScript中的对象

javascript JavaScript中的枚举和词典,循环/枚举javascript对象