可能重複:
javascript syntax: function calls and using parenthesis在JavaScript中,t.onclick = doSomething和t.onclick = doSomething()之間有什麼區別?
t.onclick = doSomething
t.onclick = doSomething()
什麼是這兩個事件登記之間的不同?
有時我會混淆他們,添加括號似乎不會造成大問題?
可能重複:
javascript syntax: function calls and using parenthesis在JavaScript中,t.onclick = doSomething和t.onclick = doSomething()之間有什麼區別?
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; };
所以'DoSomething的(),應該更好地命名爲'爲'returnSomethingNowWhichWillDoSomethingThen()'; - ) – 2012-02-20 13:02:34