Без фигурных скобок вокруг выражения стрелочной функции, material доступен внутри функции
1 2 3 4 5 |
const materials = ['Hydrogen', 'Helium', 'Lithium', 'Beryllium']; console.log(materials.map((material) => material.length)); // Expected output: Array [8, 6, 7, 9] // Real: Array [8, 6, 7, 9] |
Если же выражение завернуть в скобки то нет
1 2 3 4 5 |
const materials = ['Hydrogen', 'Helium', 'Lithium', 'Beryllium']; console.log(materials.map((material) => { material.length })); // Expected output: Array [8, 6, 7, 9] // Real: Array [undefined, undefined, undefined, undefined] |
@JFC В JavaScript, стрелочные функции имеют некоторые особенности в синтаксисе, которые важно учитывать при их использовании. В вашем вопросе разница в поведении вызвана использованием фигурных скобок и скобок вокруг выражения стрелочной функции.
1
|
console.log(materials.map((material) => material.length)); |
В этом случае, если тело стрелочной функции представляет собой только одно выражение, оно будет возвращено автоматически. В данном случае, .map()
вызывает функцию для каждого элемента массива materials
, и возвращаемое значение будет длина каждого элемента массива.
1
|
console.log(materials.map((material) => { material.length })); |
Здесь вы используете фигурные скобки, что означает, что тело стрелочной функции становится блоком кода, и для возврата значения явно требуется использовать оператор return
. Поскольку вы не используете return
, функция не возвращает никакого значения, и результатом будет массив из undefined
.
Если вы хотите использовать фигурные скобки и вернуть значение из стрелочной функции, то вы можете сделать это следующим образом:
1
|
console.log(materials.map((material) => { return material.length; })); |
Или даже более кратко:
1
|
console.log(materials.map(material => material.length)); |
Таким образом, при использовании фигурных скобок вокруг тела стрелочной функции обязательно явно возвращайте значение с помощью return
, если вы хотите, чтобы функция возвращала корректные результаты.