Вызов функции Javascript внутри setTimeout - что лучше? - PullRequest
1 голос
/ 23 января 2012

У меня есть две версии кода. Может кто-нибудь дать мне знать, что оптимально и быстрее?

Версия 1:

function showMsg(a)
{
    alert(a);
}
function invokeShowMsg()
{
    var msg = 'hi';
    showMsg(msg);
}
window.setTimeout(invokeShowMsg,1000);

Версия 2:

function showMsg(a)
{
    alert(a);
}
window.setTimeout(function(){showMsg('hi');},1000);

Еще одно сомнение, способ вызова версии 2 называется «Закрытие»?

Ответы [ 3 ]

4 голосов
/ 23 января 2012

Что касается скорости, вы не заметите никакой разницы между ними, поэтому выберите то, что вам нравится.

Я предпочитаю # 2 , так как он чище и поддерживает читабельность синтаксиса:

setTimeout(function() {
  showMsg('hi');
}, 1000);
3 голосов
/ 23 января 2012

Да, версия 2 называется закрытием. Что касается скорости, они оба эквивалентны.

2 голосов
/ 23 января 2012

Как сказал @Blender, я также предпочитаю 2 , поскольку он не загрязняет глобальное пространство (наполовину бесполезными) "вызывающими" функциями. Он чистый, и его легко понять тому, кто знает, как работает setTimeout. А что касается скорости, то здесь практически нет разницы. Вот сравнение производительности двух методов .

Однако, насколько я понимаю, это не закрытие. Это просто анонимная функция. В JavaScript, как и во многих других динамических языках, функции являются гражданами первого класса , что означает, что их можно создавать и передавать - они являются объектами. Однако закрытие - это больше, чем просто анонимная функция. Ответы на на этот вопрос объясняют, что такое закрытие довольно кратко.

...