Использование выражения с именованным выражением, вызываемым сразу (IIFE) вместо комментариев

Каковы преимущества и недостатки использования Named IIFE в JS-коде для описания и группировки связанного кода?

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


Пример

(function hideStuffOnInstantiaton(){
    $('oneThing').hide().removeClass();
    $('#somethign_else').slideUp();
    $('.foo').fadeOut();
}());

Я считаю это предпочтительным для обоих:

// hide Stuff on Instantiaton
$('oneThing').hide().removeClass();
$('#somethign_else').slideUp();
$('.foo').fadeOut();

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

и:

function hideStuffOnInstantiaton(){
    $('oneThing').hide().removeClass();
    $('#somethign_else').slideUp();
    $('.foo').fadeOut();
};

hideStuffOnInstantiaton();

Почему нужно разделять функцию и ее выполнение, если она выполняется только в одном месте?


Существуют ли какие-либо характеристики производительности, ремонтопригодности, проверки или кроссбраузер при использовании этого шаблона? Я не верю, что видел, как многие люди используют это в дикой природе, но я чувствую, что это может быть очень полезно

Ответ 1

зачем отделять функцию и ее выполнение, если она выполняется только в одном месте?

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

Хотя этот шаблон может быть полезен, если вы повторно используете функцию (рекурсивно) или вам нужно построить закрытие вокруг чего-либо, а именованная функция упрощает отладку stacktraces, есть различные ошибки в IE. Поэтому избегайте этого, если вам это действительно не нужно - и вы этого не сделаете.

Если вы хотите выразить, что ваш комментарий относится к блоку кода, вы можете явно использовать для него блок-инструкцию и поставить свой комментарий:

{ // hide Stuff on Instantiaton
    $('oneThing').hide().removeClass();
    $('#somethign_else').slideUp();
    $('.foo').fadeOut();
}

... хотя это, скорее всего, путает ваших читателей так же, как избыточный IEFE.

Ответ 2

Я всегда думал, что ярлыки классные:

hideStuffOnInstantiaton: {
  $('oneThing').hide().removeClass();
  $('#somethign_else').slideUp();
  $('.foo').fadeOut();
}

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