2012-02-20 1 views
0

Можно создать дубликат:
javascript syntax: function calls and using parenthesisВ чем разница между t.onclick = doSomething и t.onclick = doSomething() в javascript?

t.onclick = doSomething 

t.onclick = doSomething() 

что различные между двумя регистрации событий?

иногда я буду смущать их, добавить круглые скобки, кажется, не вызовет большой проблемы?

ответ

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(); 
+0

Так 'йоЗотеЬЫпд()' должен быть лучше назван 'returnSomethingNowWhichWillDoSomethingThen()'; -) –

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

Смежные вопросы