Skip to content

TypeError:不是函数

错误信息

                x is not a function
              

快速摘要

你调用了 `something()`,但 `something` 并不是函数——可能是 undefined、一个对象,或拼写错了方法名。

为什么发生

  • 变量在调用前未赋值,实际是 undefined,却被当函数调用

  • 方法名拼写错误,如把 toUpperCase 写成 toUppercase

  • 把对象或数组的属性当成函数调用,但该属性其实是数据

  • 在函数声明之前用 fn() 调用了函数表达式(TDZ)

最小示例

✗ 错误代码
const num = 10;
num.toUpperCase();
✓ 修复代码
const str = "10";
str.toUpperCase();

数字 10 没有 toUpperCase 方法,所以 num.toUpperCaseundefined,调用就抛 TypeError。改成对字符串调用即可。

如何诊断

  • 在调用前打印该变量的值和类型:console.log(typeof fn)

  • 检查方法名拼写,对照官方文档确认方法是否存在

  • 确认函数声明在前、调用在后

如何修复

  • 确保被调用的变量确实是一个函数

  • 修正方法名拼写,与原生 API 一致

  • 把函数声明提到调用之前,或改用函数声明而非函数表达式

如何预防

  • 使用 TypeScript,让非函数调用在编译期就被发现

  • 调用前用 typeof fn === "function" 做防御性检查

相关资源

相关术语

相关课程

相关练习

← 返回语言