Зачем такая конструкция?

Ниже в примере реализован, на сколько я понимаю, IIFE:

var myVar = function() {
          (0, _iterator.each)(myArray, function(index, column) {
                  //...some_iteration_code...
          })
};

Вопрос: Зачем 0 в первой скобке?


Ответы (1 шт):

Автор решения: vsemozhebuty

Это называется непрямой вызов функции или метода (indirect function call, можно погуглить для подробностей). Если вы просто заключите метод в скобки: (_iterator.each)(), скобки будут проигнорированы и получится обычный вызов метода, в котором this будет равно _iterator. Иногда нужно оторвать функцию от контекста вызова, и тогда в скобках функцию ставят после любого значения через запятую (это может быть 0 как символ того, что первый операнд до запятой не важен), в таком случае мы получаем последнее значение после запятой, ссылку на функцию, оторванную от контекста её вызова.

То есть (0, _iterator.each)() можно приравнять к такому виду намеренной потери контекста вызова:

const func = _iterator.each;
func();

И это не IIFE (Immediately Invoked Function Expression), потому что Function Expression тут как раз нет. Хотя из-за сокращения шагов тут тоже есть "Immediately Invoked" и потому, наверное, срабатывает ассоциация.

Использоваться это может по-разному, в вашем случае нужно смотреть документацию или комментарии к коду.

→ Ссылка