Я новичок в JavaScript и в настоящее время учусь сокращенно писать функции. Я только сталкивался с этим, изучая:

const groceries = (groceryItem) => ' - ' + groceryItem;

Является ли приемлемой / лучшей практикой в реальном мире писать такие функции? (без возврата, без скобок) Я заметил, что это может раздражать, чтобы расширить. Или это просто стандартная практика?

Я также замечаю сокращенные выражения if, которые также не имеют скобок. Также стандартная практика?

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

-1
bax 26 Фев 2018 в 22:12

3 ответа

Лучший ответ

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

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

Объявление функций :

function foo(){

}

При объявлении функции вся функция поднимается (независимо от ее фактического местоположения в коде) в верхнюю часть области видимости. Это позволяет вызывать функцию до точки ее объявления.

Выражение функций :

var foo = function(){


}

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

Функции стрелок :

const groceries = (groceryItem) => ' - ' + groceryItem;

Это просто краткий синтаксис вместо использования выражения функции. Тем не менее, есть разница с функцией стрелки. С помощью функций со стрелками объект, к которому привязывается this, не затрагивается в функции, в то время как в функции, не связанной со стрелкой.

Выражение немедленного вызова функции :

(function(){

})();

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

< Сильный > Примечание :

функции являются работают с JavaScript, в зависимости от того, как вы их настраиваете и вызываете, они делают много разных вещей:

  • Они могут быть единицами непосредственно вызываемого кода.
  • Они могут быть значением переменной или свойства.
  • Они могут быть функциями конструктора, которые используются для создания экземпляров Object.
  • Это могут быть необработанные данные, которые передаются через аргументы.
3
Scott Marcus 26 Фев 2018 в 19:33

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

const groceries = function(groceryItem) {
    return ' - ' + groceryItem;
}

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

newarray = oldarray.map(function(x) {
    return x * x;
}

С:

newarray = oldarray.map(x => x * x);

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

0
Barmar 26 Фев 2018 в 19:41

Функция, которую вы написали - это то, что обычно называют «функцией стрелки». Они могут оказаться очень полезными, когда вы перейдете на более продвинутый уровень в JavaScript, и с ними абсолютно все в порядке. С другой стороны. Очень часто используется с «функциями более высокого порядка» для массивов, чтобы привести пример.

-1
Alejandro G. 26 Фев 2018 в 19:23