В чем разница в написании функции module.exports?

Я вижу разные способы написания кодировщиками функции module.exports.

1-й:

module.exports = function() {
  return (async () => {

  })()
}

2-й:

module.exports = async () => {

}

В чем разница между 1-м и 2-м способами?

И зачем сначала возвращать функцию async () в уже определенной функции. И во 2-м способе мы не вызываем функцию, как в 1-м способе.

Может ли кто-нибудь помочь мне понять эту концепцию. Я очень новичок в Javascript

Первый возвращает обещание, которое является результатом вызова асинхронной функции. Второй возвращает (не вызываемую) асинхронную функцию.

CertainPerformance 22.05.2018 05:09
Поведение ключевого слова "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) для оценки ваших знаний,...
0
1
55
2

Ответы 2

Фрагмент 1 - это обычная функция, которая использует IIFE, а фрагмент 2 - это стрелочная функция. Обе функции возвращают обещания, потому что async является синтаксическим сахаром для функции, возвращающей обещания.

IIFE обычно используются для предотвращения утечки переменных в глобальную область видимости. Это не проблема в Node, потому что код выполняется в области видимости модуля.

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

var foo; // not a probem; it pollutes module namespace but doesn't leak anywhere
module.exports = function() {
  var foo; // can have another foo here, but it could be defined inside async
  return (async () => {/*...*/})()
}

Фрагменты 1 и 2 ведут себя по-разному из-за различий между обычными и стрелочными функциями. Функция из фрагмента 1 может быть связана, использовать arguments и т. д., А функция из фрагмента 2 - нет.

Фрагмент 2 обычно является предпочтительным способом.

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

Важно отметить, что module.exports и функции - это две концепции в javascript, которые не связаны напрямую друг с другом.

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

module.exports = ""; //exports a string
module.exports = {name:"john"}; //exports an object
module.exports = 3.14159; //exports a number

функции - это некоторые из многих "вещей" в javascript. В общем, их цель - взять что-то и что-то с этим сделать. В основном есть две формы:

function(){ } 

а также

()=>{}

Вы можете узнать больше о разнице между двумя формами здесь: http://2ality.com/2012/04/arrow-functions.html

Есть также асинхронные функции, функции, которым предшествует ключевое слово async и которые позволяют обрабатывать данные в фоновом режиме. Вы можете узнать больше об асинхронных функциях здесь: http://2ality.com/2016/02/async-functions.html.

Я не связан с 2ality.com, но это действительно хороший ресурс.

Удачи!

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