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.toUpperCase 是 undefined,调用就抛 TypeError。改成对字符串调用即可。
如何诊断
在调用前打印该变量的值和类型:
console.log(typeof fn)检查方法名拼写,对照官方文档确认方法是否存在
确认函数声明在前、调用在后
如何修复
确保被调用的变量确实是一个函数
修正方法名拼写,与原生 API 一致
把函数声明提到调用之前,或改用函数声明而非函数表达式
如何预防
使用 TypeScript,让非函数调用在编译期就被发现
调用前用
typeof fn === "function"做防御性检查