You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript调用函数报'B is not a function'错误如何解决

错误原因

触发B is not a function的核心原因是当前作用域下没有可直接访问的名为B的函数:你只把B函数挂载到了CommonJS模块的exports导出对象上,没有在模块作用域内单独声明B标识符,直接写B()调用时,JS引擎沿作用域链查找不到B的定义,就会抛出类型错误。

修复方法

两种常用修复方式,根据代码习惯选择即可:

  • 方法1:调用时显式引用exports对象上的B方法
exports.createRecord = function A() {
  exports.B();
};

exports.B = () => {
  // B函数业务逻辑
}
  • 方法2:先在模块作用域内声明B函数,再挂载到exports上(推荐)
// 先声明内部可直接调用的B函数
const B = () => {
  // B函数业务逻辑
}

exports.createRecord = function A() {
  B(); // 作用域内可直接访问B,不会报错
};

// 再把B挂载到导出对象供外部使用
exports.B = B;

推荐优先用方法2,后续如果调整导出规则、重构内部逻辑,内部调用B的代码不需要同步修改,维护成本更低。

其他常见触发场景排查

如果按上面改完仍报错,检查两个高频问题:

  • 是否存在执行时序问题:如果在exports.B = () =>{}这行赋值代码执行前就调用了createRecord,此时exports.B还是undefined,调用同样会报类型错误
  • 是否存在变量名冲突:检查A函数内部、外层模块作用域有没有声明过同名B变量,且赋值了非函数类型的值(比如对象、字符串、null等)

内容的提问来源于stack exchange,提问作者Tejas Mehta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 22:21:46