В JavaScript функции являются первоклассными гражданами, что, короче говоря, означает, что функция может вести себя как регулярная переменная.
Рассмотрим:
var x = 5; // x holds a reference to 5
foo(x); // Send whatever is inside x to foo, so it may do something with it.
Аналогично, мы можем сделать это:
// Again, x holds a reference to something
var x = function() {
console.log("hello");
}
foo(x); // And again, we send that something into foo
Во втором примере, x
и function() {...}
одинаковы. Написание одного такого же, как написание другого, и точно так же, как x
в первом примере «действительно есть» число 5, x
во втором примере «действительно есть» функция.
Теперь, когда мы хотим, чтобы функция запускалась, мы вызываем ее, используя ссылку + круглую скобку. Рассмотрим следующие примеры, которые все делают то же самое:
// foo is the reference to the function, just like x was.
// and we call it with parenthesis:
function foo()
{
console.log("Hello");
}
foo(); // Logs "hello".
// reference to function (still foo) + parenthesis
var foo = function()
{
console.log("Hello");
}
foo(); // Logs "Hello"
// Now: A function is called by a reference to a function followed by parenthesis
// So, we can also do this rather nifty thing:
function foo()
{
console.log("Hello");
}()
// A reference to a function, followed by parenthesis!
Поэтому короткий ответ, как и другие отметили, что круглые скобки используются при объявлении функции и вызов функции, не проходя вокруг ссылки.
Я голосующий, чтобы закрыть этот вопрос как не по теме, потому что он находится на первой странице каждого/любого учебника по программированию. – Mathletics
@Mathletics Не так ли? Поскольку каждый/любой учебник для начинающих я могу найти разговоры о вызове функции с именем() (всегда заканчивающимся скобкой даже при отсутствии аргументов). Только после многих поисков я начинаю понимать. – str4
@Mathletics: Действительно? Использование ссылок на функции не является точным «на первой странице» – Thilo