Существуют ли технические или кодовые причины не называть ваши функции IIFE? - PullRequest
0 голосов
/ 25 июня 2018

Выражение немедленного вызова функции ( определено и объяснено здесь ) часто пишется как ...

(function() { /* code */ })();

ИзВ статье выше, Бен Алман добавляет этот комментарий:

Добавление идентификатора в выражение функции (таким образом, создание выражения именованной функции) может быть чрезвычайно полезным при отладке.

Тамявляется отладочным преимуществом для именования вашего IIFE, например ...

(function myComponentIIFE(){ /* code */ })();

Если есть какое-то преимущество, то кажется, что обычной практикой будет называть все вашианонимные IIFE.Есть ли причина, по которой IIFE обычно анонимны?Анонимные функции обрабатываются по-разному, так что они имеют некоторое преимущество?

1 Ответ

0 голосов
/ 25 июня 2018

(function() { /* code */ })() короче (function myComponentIIFE(){ /* code */ })(), занимает в минимизированном коде на 2 байта меньше и меньше времени на обдумывание и ввод.

Имя функции чрезвычайно полезно при отладке только тогда, когда она отлажена в незавершенном приложении с текстовым журналом, который не может быть связан с соответствующими строками. В любом другом случае это бесполезно.

В минимизированном приложении это не приносит пользы отладке и становится чем-то вроде:

(function a(){ /* code */ })();

В строке вывода выходного стека консоли браузера можно динамически переходить к реальному коду, нажимая на них.

IIFE имеют ограниченное использование в современном JavaScript. IIFE широко использовались в ES5 для реализации шаблона модуля и / или обеспечения области для блока кода. Эти виды использования в настоящее время обрабатываются блок-областями и модулями ES6.

Большинство существующих в приложении IIFE-файлов создаются автоматически. Только некоторые из них написаны разработчиком. Если известно, что IIFE приносит пользу отладке или приводит к самодокументируемому коду, то да, имеет смысл дать функции имя.

Примером в современном JS является async IIFE, который использует, например, в качестве точки входа приложения:

(async function main() {
  // ...
})()
.catch(console.error);
...