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

添加console.log后触发Uncaught TypeError的原因及分号影响解析

为什么未加分号时会出现Uncaught TypeError: console.log(...) is not a function?

问题根源在于JavaScript的自动分号插入(ASI)规则:当你没在console.log("Running")末尾加分号时,引擎不会自动补分号,反而把两行代码合并解析成了一个非法的函数调用:

console.log("Running")(0, user["hello"])()

console.log()的返回值是undefined,你试图把undefined当作函数去调用,自然就抛出了类型错误。

为什么ASI没自动补分号?

ASI的逻辑是:只有当当前行代码和下一行代码拼接后会触发语法错误时,才会自动插入分号。而表达式 + (xxx)在语法上是合法的(表示把前一个表达式的结果当作函数执行),所以引擎认为这是你故意写的连续调用,不会补分号。

加分号后为什么正常?

加了分号;后,两行被明确拆成两个独立语句:

  1. 执行console.log("Running")输出内容
  2. 执行(0, user["hello"])(),这里的逗号运算符会返回user["hello"]这个函数,然后调用它(此时this指向全局对象/严格模式下为undefined)

这样就不会出现把undefined当函数调用的情况了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 12:44:57