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

console.clear()后接自调用函数触发is not a function报错问题

错误原因

这是JavaScript自动分号插入(ASI)规则导致的经典语法解析问题:
console.clear()行尾没有手动写分号时,JS引擎不会在这行自动插入分号终止语句,会跳过中间的空行、单行注释,把下一行立即执行函数开头的(,判定为对console.clear()返回值的函数调用。

实际解析后的等价逻辑是:

console.clear()(function () {
    console.table(countries)
})()

console.clear()的返回值是undefined,对undefined做函数调用自然会抛出console.clear(...) is not a function的类型错误。
移除后面的立即执行函数后,没有了后续的括号调用语法,console.clear()会被识别为独立语句,所以能正常执行,控制台输出清屏成功的提示。

验证方法

哪怕不写完整的立即执行函数,只要在console.clear()后紧跟括号包裹的内容,都会触发相同错误,比如:

console.clear()
(1)

运行后会抛出完全一致的报错,和当前遇到的问题原理完全相同。

解决方案

二选一即可:

  • 给console.clear()行尾补上分号,明确标记语句结束:
console.time('for of loop')
for(const country of countries){
    console.log(country.name, country.capital)
}
console.timeEnd('for of loop')

console.clear();

// Level 1.
(function () {
    console.table(countries)
})()
  • 如果习惯不写行尾分号,就在所有以(、[、/(正则开头)等特殊符号起始的语句前,手动加一个前置分号,避免和上一行语句粘连解析:
console.time('for of loop')
for(const country of countries){
    console.log(country.name, country.capital)
}
console.timeEnd('for of loop')

console.clear()

// Level 1.
;(function () {
    console.table(countries)
})()

注意:单行注释、空行都不会阻断JS引擎的连续语句解析,不要依赖空行或者注释来分隔语句。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:24:29