← 中文资源

简体中文版本

JavaScript 报 TypeError: X is not a function

通过核对调用处的值、检查导入并避免 this 绑定陷阱,诊断“不是函数”错误。

阅读英文原文

症状

调用失败并报 TypeError: something is not a function。被调用的值要么是 undefined,要么是错误类型的对象,或是与接收者分离的方法。这常发生在改动导入方式(如默认导出与具名导出互换)之后,或把对象方法作为回调传递而未绑定时,后者会丢失 this。

诊断

在调用处打印 typeof 与值本身;用动态 import 查看模块导出形状;检查方法是否需要 bind。

console.log(typeof target, target)

根因

调用处的值不可调用,因为它是 undefined、是导入形状错误的对象,或是被分离的方法,而非函数定义缺失。

修复

修正导入方式、属性名或对象结构;对方法进行 bind 或在接收者上调用,使 this 已定义。

验证

重跑该路径确认调用成功,并通过检查副作用或返回值确认函数确实执行。调用成功且行为正确才是真正的修复。

常见陷阱

把方法直接作为回调传入会丢失 this;应使用绑定函数或箭头包装。