Tech Jargon Series.
Вероятно, вы уже знаете, как писать функции в обоих этих способах. Функция Достоки () {} и () = > {} – символы, которые мы вводим весь день. Но как они отличаются и зачем использовать один над другим?
Примечание: Примеры приведены в JavaScript. Y наше М ILEAGE М AY. V ary с другими языками.
Первое отличие: имя
Когда вы создаете функцию с помощью Имя , это Декларация функции Отказ Имя может быть опущено в Функциональные выражения , делая эту функцию «анонимной».
Декларация функции:
function doStuff() {};Функция выражения:
const doStuff = function() {}Мы часто видим анонимные функции, используемые с синтаксисом ES6, как:
const doStuff = () => {}Подъемность
Подъемка относится к доступности функций и переменных «в верхней» вашего кода, а не только после того, как они созданы. Объекты инициализируются при компиляционном времени и доступны в любом месте вашего файла.
Декларации функций поднимаются, но выражения функций нет.
Это легко понять с примером:
doStuff();
function doStuff() {};Вышесказанное не бросает ошибку, но это будет:
doStuff();
const doStuff = () => {};Случай для функционирования выражений
Может показаться, как функциональные декларации, при этом их мощные подъемные свойства, собираются предавать функциональные выражения для полезности. Но выбирая один над другим, требует думать о Когда и где требуется функция . В основном, кому нужно знать об этом?
Выражения функций вызываются для Избегайте загрязнения глобальной массы . Вместо вашей программы знают о многих различных функциях, когда вы держите их анонимными, они используются и забыты немедленно.
IIFE.
Имя – Сразу вызывало функционные выражения – в значительной степени говорит все это здесь. Когда функция создана одновременно, его называют, вы можете использовать IIFE, которая выглядит так:
(function() => {})()или:
(() => {})()Для глубокого взгляда на IIFES, проверьте Эта всесторонняя статья Отказ
Обратные вызовы
Функция, передаваемая другую функцию, часто называют «обратным вызовом» в JavaScript. Вот пример:
function mapAction(item) {
// do stuff to an item
}
array.map(mapAction)array.map(mapAction)
Проблема вот что картация Будет доступен для всего вашего приложения – нет необходимости в этом. Если этот обратный вызов – это функциональное выражение, он не будет доступен за пределами функции, которая использует ее:
array.map(item => { //do stuff to an item })или
const mapAction = function(item) {
// do stuff to an item
}
array.map(mapAction)array.map(mapAction)
Хотя картация будет доступен для кода ниже его инициализация.
Резюме
Короче говоря, используйте функциональные объявления, когда вы хотите создать функцию в глобальном объеме и сделать его доступным в течение всего вашего кода. Используйте функциональные выражения для ограничения, когда доступна функция, сохраните свой глобальный свет охвата и поддерживать чистый синтаксис.
использованная литература
- Декларация функции , Документы MDN.
- Функция выражение , Документы MDN.
- Подъем , MDN глоссарий.
Tech Jargon Series
Существуют так много фраз, которые бросаются в Tech Mightups и конференции, предполагая, что все уже сгибаются с линго. Я часто не с линго. Для разработчиков распространены удивление, что мне не хватает знаний.
Правда в том, что я часто просто не знаю правильного слова для этого. Как люди, но особенно разработчики людей, мы любим увольнять тех, кто не «разговаривает на разговоре», поэтому эта серия состоит в том, чтобы получить твердое представление о концепциях программирования, которые один «должен знать».
Это вторая статья в серии. Первый был Функции высшего порядка Отказ Посмотрите на больше, когда я хожу в встречи и конференции и притворяясь, что узнать, о чем говорят моих товарищ, но тогда должны идти домой и Google.
Оригинал: “https://www.freecodecamp.org/news/when-to-use-a-function-declarations-vs-a-function-expression-70f15152a0a0/”