«Ошибка типа: x не является функцией», даже когда код работает

#javascript #reactjs

#javascript #reactjs

Вопрос:

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

Есть ли какой-нибудь способ предотвратить это? Кажется странным выдавать ошибку, когда она все еще выполняется правильно.

 func1 = (x,y) => {
  let result=(x y)
  console.log(result)
}

func2 = x => {
  x()   // <= TypeError pointing to this not being a function
}


func2(func1(1,4)) // returns 5 but still getting TypeError

  

Ответ №1:

func2 принимает функцию в качестве параметра, но вы передаете ее func1(1,4) как параметр, который вычисляется undefined как (поскольку func1 ничего не возвращает).

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

 const func1 = (x, y) => {
  const result = x   y;
  console.log(result);
}

const func2 = x => {
  x();
};


func2(() => func1(1, 4));  

Или, если вы хотите сделать его более функциональным, вы даже можете сделать что-то вроде:

 const func1 = x => y => x   y;

const func2 = x => x;

console.log(func2(func1)(1)(4));  

Комментарии:

1. Блестяще! Большое спасибо за подробное изложение. Вызов сделал свое дело.

Ответ №2:

Вы уже отправляете функции в качестве параметров. Входящее свойство уже является функцией. Вам не нужно снова вводить ‘()’.

 const func1 = (x, y) => {
const result = x   y;
console.log(result);
}

const func2 = x => {
  x;
};

func2(func1(1, 4));