Когда использовать анонимную функцию в Nodejs?

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

(function(foo){
    ...
    console.info(foo);
    ...
})();

Так это выглядит очень скучно

function display(db, user, foo) {
    if (isValid(db, user) {
        (function(foo){
            console.info(foo);
        })();
    }
    ...
}

Первоначально у него не было (); в конце, поэтому, насколько я понимаю, он даже не был вызван, но, на мой более широкий вопрос, в чем разница между этим и чем-то вроде ниже? Я видел этот синтаксис несколько раз, но не понимаю, насколько это может быть полезно для этой цели. Насколько я понимаю, это просто добавляет ненужной сложности. Кто-нибудь, пожалуйста, просветите меня!

function display(db, user, foo) {
    if (isValid(db, user) {
        // without abstract function
        console.info(foo);
    }
    ...
}

Спасибо :-)

Тот, кто сам хочет знать ответ на вопрос, думаю, вопрос должен быть "когда использовать анонимную функцию в nodeJS". Просто предложение :)

iRohitBhatia 08.01.2019 17:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

При проведении обзоров я часто предполагаю, что любой console.info (или ведение журнала с выбором языка) случаен. Если окружающий источник сам по себе не делает ничего ценного, он, вероятно, предназначен только для поддержки (возможно, устаревшего) console.info во время разработки и отладки.

Поскольку JavaScript является однопоточным, создание такой анонимной функции строго ограничено. В случае исходного источника, у которого не было исполнения (т.е. в нем отсутствовал ()), на самом деле это способ «скрыть» отладочный код от среды выполнения, оставив его на месте, если пошаговая отладка когда-либо нужно это.

При отладке это так же просто, как добавить ('isValid succeeded'), чтобы он выполнял весь исходный код внутри.

(function(foo){
    console.info(foo);
})( /* You're missing a parameter value here; will print 'undefined'. */ );

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

luckyging3r 08.01.2019 18:49

На данный момент я думаю, что это был симптом синдрома ctrl + c ctrl + v, и кто-то забыл удалить эту часть.

luckyging3r 08.01.2019 18:52

Трудно сказать, какой здесь был предполагаемый параметр; в конце концов, это не TypeScript. Поскольку console.info с радостью регистрирует все, что вы ему бросаете, это даже не обязательно означает, что это должна быть строка. Я думаю, что главное здесь в том, что этот код был специально определен предыдущим разработчиком и оставлен невызванным, чтобы он не выполнялся при нормальной работе.

Ian MacDonald 08.01.2019 18:57

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

Рассмотрим следующие примеры:

var a = 2, b = 3;
function print(x)
{
    console.info('x= ', x);
}
print(a+b);

В приведенном выше примере a, b и print теперь принадлежат объекту окна. Когда ваш код растет, становится трудно отслеживать и избегать конфликтов имен. Проблема становится еще более серьезной, если вы используете сторонние библиотеки и т. д.

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

(function(localParam){
    var a = 2, b = 3;
    function print(x)
    {
        console.info('x= ', x);
    }
    print(a+b);
    //also
    console.info(localParam); // = safe way to access and global variables
})(globalParam);

globalParam у вас есть. Это используется в анонимной функции. В каком объеме будет находиться globalParm?

luckyging3r 08.01.2019 18:48

globalParam - это что-то из родительской или глобальной области для передачи в локальную (внутри замыкания) область видимости.

Eriks Klotins 08.01.2019 21:45

Другие вопросы по теме