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