Что означают скобки после фигурных скобок?

Я видел Javascript-код, который использует скобки сразу после функции, закрывающей фигурные скобки, я не могу понять, для чего они используются.

Пример:

function foo(bar){
  return bar;
}(0);
  • Что делает (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