Понять работу функции

Объясните какую роль выполняют оборачивающие скобки вокруг функции и какая роль у значения (i) - похож на аргумент

var shooter = (function(i) {
return function() {
	alert(i);
};

})(i);

Так же можно увидеть код
` $( function(){ … })()``
зачем функцию оборачивают в jQuery и зачем последние две скобки “()”?

var shooter = (function(i) {
  return function() {
	alert(i);
  };
})(i);

это самовызывающеяся функция (Immediately-invoked function expression )
а i - это в последних скобках - это не аргумент, а параметр, который передается функции.
равно такому коду:

function myFunc (i) {
  return function() {
	alert(i);
  };
});
var shooter = myFunc(i)
1 лайк

Чаще всего такие функции используются в случаях, когда надо скрыть область видимости, т.к. пока ещё не все браузеры реализовали оператор let (что даст возможность создавать блочные области видимости).

Хороший пример.

Ещё эти функции используют, когда необходимо произвести “вычисление на месте”, то есть прямо здесь и сейчас выполнить код внутри этой функции с аргументом(ами) извне, чтобы избежать замыкания последнего значения аргумента.

Стандартный пример, когда идем циклом по массиву ссылок и навещиваем обработчик, который выведет alert('Я ссылка ' + i), в этом случае обертывание тела массива в такую функцию решит проблему алерта одной цифры.

На заметку такие функции ещё могут выглядеть вот так:
+function () {alert(1)}();
!function () {alert(2)}();
var obj = {a: function () {return 'Param "a"';}()};

1 лайк

это пример с выводом одного значения переменной счетчика цикла в алерте?
Не ясно всеравно, разве что это используется для инкапсуляции - нужно столкнуться с ними в работе что бы понять их особенности. Сбросьте примеры применения таких функций пожалуйста.