Есть небольшая разница.
Когда вы делаете function(){ myLongFunc(); }
, вы определяете анонимную функцию, которая является оберткой вокруг myLongFunc
.
Когда вы делаете change(myLongFunc())
, вы не получаете ожидаемого результата, потому что на самом деле вызывает функцию и передает результат вызова change
.
Итак, что вы на самом деле хотите сделать, это change(myLongFunc)
, потому что теперь вы передаете реальный объект функции.
Существует еще один сценарий:
var myLongFunc = function() { ... };
Теперь, когда вы передаете myLongFunc
, вы передаете ссылку на анонимную функцию.
Другая форма, которую принимают функции Javascript - это литерал функции, где вы определяете функцию и вызываете ее немедленно. Это работает, потому что функции являются первоклассными объектами в Javascript:
(function() {
...
})();
или даже:
(function myFunc() {
...
})();
В этом сценарии вы определяете функцию и вызываете ее немедленно. Эта форма обычно используется для пространства имен и инкапсуляции при создании каркасов или библиотек. Это делает jQuery, и он называется шаблоном модуля.