Заключение функции в скобки гарантирует, что эта функция будет оценена как выражение функции .
Это происходит потому, что оператор группировки (в скобках) может вычислять только выражения .
Если скобки не используются, это будет интерпретировано как объявление функции , и это вызовет синтаксическую ошибку, поскольку имя функции не необязательно для объявлений функции.
(function(arg){
alert(arg); // alerts test
})("test");
В приведенном выше примере выражение функции выполняется автоматически, передавая аргумент.
Этот шаблон интенсивно используется плагинами jQuery, поскольку jQuery может работать в режиме noConflict , глобальная переменная $
не будет создана, поэтому глобальный объект jQuery передается в качестве аргумента этого анонимная функция и внутри этой функции вы можете свободно ссылаться на нее как $
(полученный аргумент).
Имейте в виду, что также контекст функции (ключевое слово this
) внутри выражений самоисполняющейся функции, вызываемых как в примере выше, всегда будет ссылаться на глобальный объект.
Более подробную информацию о различиях между выражениями функций и объявлениями функций можно найти в следующих ресурсах: