Что означают скобки после фигурных скобок?
Я видел Javascript-код, который использует скобки сразу после функции, закрывающей фигурные скобки, я не могу понять, для чего они используются.
Пример:
function foo(bar){
return bar;
}(0);
Ответы
Ответ 1
В вашем примере у вас просто два оператора и это эквивалентно:
function foo(bar){
return bar;
}
0;
Это не функция самозапускания. Первый оператор является объявлением функции , второй оператор - буква буква 0
, который ничего не делает. Скобки не выполняют функцию, это оператор группировки.
Как мы можем это доказать? Попробуйте:
function foo(bar){
return "bar";
}(0);
и скажите мне, что такое выход.
Это была бы самозапускающаяся функция, если бы у нас было выражение function. Для этого вы можете использовать оператор группировки, чтобы заставить его оцениваться как выражение.
Например:
(function foo(bar){
return bar;
})(0);
Это выраженное имя функции. Результат выражения ((function ....)
) является ссылкой на функцию, а (0)
выполняет функцию, передавая 0
в качестве аргумента.
Положение скобок также может быть:
(function foo(bar){
return bar;
}(0));
Возможно, это то, что вы видели.
Этот метод уже широко обсуждался здесь: Какова цель функции самоисполнения в javascript?
Ответ 2
Они сразу же вызывают функцию, аналогичную функции вызова:
function foo() {
alert('hello');
}
foo(); // call
Вы также можете называть его напрямую:
(function foo(){
alert('hello');
})(); // <--------------
В настоящее время у вас есть Function Declaration
. Чтобы действительно вызывать его, вам нужно сделать это в круглой скобке (чтобы сделать это выражение):
(function foo(bar){
return bar;
})(0);
И теперь это Function Expression
и будет немедленно вызываться. Чтобы узнать разницу между Function Declaration
и Function Expression
, ознакомьтесь с этой замечательной статьей Kangax:
Что делает (0)?
Это аргумент, переданный функции foo
, поэтому bar
будет 0
внутри функции.
Что называется?
Это самостоятельная или самостоятельная функция. Вы также можете увидеть это.
Когда вы должны использовать эту технику?
Если вы хотите сразу вызвать функцию и сохранить область видимости переменной внутри этого выражения функции. Он не будет доступен для внешнего мира или, скорее, кода вне этого выражения функции.
Подробнее:
Ответ 3
Это функция self invoking. Вы передаете 0 в качестве параметра. Поэтому ваша функция будет возвращать бар, равный 0.
Например, приведенная ниже функция эквивалентна:
function foo(bar) {
return bar;
}
foo(0); // returns 0