类型错误:回调不是 JavaScript 中的函数

类型错误:回调不是 JavaScript 中的函数

TypeError: callback is not a function in JavaScript

“TypeError: callback is not a function”错误发生在我们为
callback函数定义参数但调用函数而不传递回调时。

要解决该错误,请指定一个函数作为默认参数,或者在调用该函数时始终提供一个参数。

typeerror 回调不是一个函数

下面是错误如何发生的示例。

索引.js
function example(callback) { return callback(); } // ⛔️ TypeError: callback is not a function example();
我们定义了一个函数,它以 acallback作为参数,但在调用该函数时没有提供回调。

调用函数时始终提供回调

要解决该错误,请确保在调用该函数时始终提供回调。

索引.js
function example(callback) { return callback(); } // ✅ Works example(() => { console.log('success'); });

我们在调用函数时传递了一个箭头函数回调example,但你也可以使用命名函数。

索引.js
function example(callback) { return callback(); } function logMessage() { console.log('success'); } // ✅ Works example(logMessage);

callback为参数定义一个默认值

或者,您可以为参数定义默认值callback这样即使在调用函数时没有提供参数也不会报错。

索引.js
function example(callback = () => {}) { return callback() } // ✅ Works example();

我们使用了一个不做任何事情的函数作为
callback参数的默认值。

当在没有提供回调的情况下调用函数时,将使用空函数的默认值。

您还可以根据您的用例使用任何其他函数作为默认参数。

索引.js
function example(callback = defaultFunc) { return callback(); } function defaultFunc() { console.log('success'); } // ✅ Works example(); // 👉️ success

Check if the callback function was provided before calling it #

Perhaps, an even better approach is to check if the callback was provided before
calling it in the function.

index.js
function example(callback) { if (typeof callback === 'function') { return callback() } } // ✅ Works example();

The typeof operator allows us to check if the callback variable stores a
function.

We only call the callback if it is provided and has a type of function.

If the error persists, console.log the callback variable and its type, e.g. console.log(typeof callback).

Make sure that the variable stores a function before calling it.

You might be declaring a variable named callback that shadows the value of a
function you’re trying to invoke.

Make sure you’re spelling callback correctly, as variable names are
case-sensitive.

Conclusion #

“TypeError: callback is not a function”错误发生在我们为
callback函数定义参数但调用函数而不传递回调时。

要解决该错误,请指定一个函数作为默认参数,或者在调用该函数时始终提供一个参数。