node.js: экспортировать нормальную функцию или функцию стрелки? - PullRequest
0 голосов
/ 20 сентября 2018

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

Экспортировать нормальную функцию

module.exports = function(id) {
   console.log(id);
};

Экспортировать функцию стрелки

const test = id => {
  console.log(id);
}
module.exports = test;

Ниже приведены несколько вопросов, которые у меня на уме.

  1. Если для функции со стрелкой рекомендуется нормальная функция, то почему я не рекомендую использовать функцию со стрелкой.

  2. Если функция со стрелкойрекомендуется по сравнению с обычной функцией, тогда почему я не рекомендую использовать нормальную функцию.

Как понять рекомендованную функцию, особенно в этом сценарии экспорта функции?

1 Ответ

0 голосов
/ 20 сентября 2018

Эти два фрагмента не идентичны.Первый фрагмент приводит к анонимной функции, а второй - к именованной функции require('...').name === 'test' (это может быть полезно для отладки).

Более подходящее сравнение -

module.exports = function test(id) {
   console.log(id);
};

против

const test = id => {
  console.log(id);
}
module.exports = test;

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

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

Кроме того, именованные функции стрелок могут привести к более подробному выводу, чем обычные функции определения , если онипереносятся в ES5:

const test = () => {} 

переносится в

var test = function test() {}

Хотя это может быть:

function test() {}

Это не касается Node.jsили другое окружение ES6.


TL; DR: если функции необходимо иметь имя для отладки или других целей, имеет смысл использовать:

module.exports = function test(id) {
   console.log(id);
};

Если функцияимя не нужно, это:

module.exports = id => {
  console.log(id);
};

Это верно для функций, которые не используют функции, специфичные для этих типов функций.

...