什么'这是javascript中t.onclick=doSomething和t.onclick=doSometi

What's the differences between t.onclick = doSomething and t.onclick = doSomething() in javascript?

本文关键字:onclick doSometi doSomething 这是 javascript 什么      更新时间:2023-09-26

可能重复:
javascript语法:函数调用和使用括号

 t.onclick = doSomething 
 t.onclick = doSomething()

这两个活动注册有什么不同?

有时我会对它们感到困惑,加一个括号似乎不会造成大问题?

第一个将对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();

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