TypeError: невозможно прочитать свойство forEach из undefined Javascript - PullRequest
2 голосов
/ 28 мая 2020

Ниже приведен код, в котором я получаю Cannot read property 'forEach' of undefined.

const print2 = function(x, y) {
  console.log(x*y)
}

[1,2,3,4].forEach( x => print2(x, 20) )

Сообщите мне, что я делаю здесь не так, хотя если я это сделаю -

function print2(x, y) {
  console.log(x*y)
}

[1,2,3,4].forEach( x => print2(x, 20) )

это работает нормально.

enter image description here

Ответы [ 4 ]

7 голосов
/ 28 мая 2020

Поскольку после функции нет точки с запятой, фрагмент интерпретируется следующим образом:

const print2 = function(x, y) {
  console.log(x*y)
}[1,2,3,4].forEach( x => print2(x, 20) )

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

const print2 = function(x, y) {
  console.log(x*y)
};

[1,2,3,4].forEach( x => print2(x, 20) )

или

const print2 = function(x, y) {
  console.log(x*y)
}

;[1,2,3,4].forEach( x => print2(x, 20) )

Подробнее об автоматизации Javascript c вставка точки с запятой здесь: Каковы правила для JavaScript автоматической вставки c точки с запятой (ASI)?

4 голосов
/ 28 мая 2020

Вам нужна точка с запятой в конце объявления переменной.

const print2 = function(x, y) {
  console.log(x*y)
};

[1,2,3,4].forEach( x => print2(x, 20) )

Без точки с запятой это обрабатывается как

const print2 = function(x, y) {
  console.log(x*y)
}[1,2,3,4].forEach( x => print2(x, 20) )

[1,2,3,4] интерпретируется как средство доступа к свойству, а не как массив, и оператор запятой возвращает последнее значение 4. Поскольку функция не имеет свойства 4, оно возвращает undefined, а затем вы пытаетесь вызвать .forEach() для этого.

2 голосов
/ 28 мая 2020

После FunctionExpression отсутствует точка с запятой.

const print2 = function(x, y) {
  console.log(x*y)
}

[1,2,3,4].forEach( x => print2(x, 20) )

измените на

const print2 = function(x, y) {
  console.log(x*y)
};

[1,2,3,4].forEach( x => print2(x, 20) )

и все работает.

0 голосов
/ 28 мая 2020

Я думаю, вместо [1,2,3,4].forEach( x => print2(x, 20) ) вам следует использовать переменную типа array.forEach(x => print2(x, 20));

Например, приведенный ниже код:

let array = [1,2,3,4];
const print2 = function(x, y) {
    console.log(x*y);
};

array.forEach( x => print2(x, 20) );
...