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

为何我的jQuery滚动/汉堡菜单代码出现Uncaught TypeError错误?

解决 Uncaught TypeError: (intermediate value)(…) is not a function 错误

这个错误我之前也踩过好几次坑,核心原因其实是JavaScript分号自动插入(ASI)机制的局限性——你看起来没漏分号,但实际上在代码块衔接的关键位置,ASI没有帮你自动补上,导致JS把两个完全不相关的表达式当成了一个函数调用。

你的代码问题分析

看你提供的代码,第二个代码块(页面刷新时添加滚动效果的部分)结尾的});后面没有分号,紧接着下一个是立即执行函数(function( $ ) { ... })( jQuery );。JS会把这两段代码错误解析成:

$(function(){ ... })(function($){ ... })(jQuery);

简单说就是:JS把$(function(){...})的返回值(jQuery对象)当成了函数,试图调用它并传入后面的function($){...}作为参数,最后还想把这个调用结果再当成函数传入jQuery调用一次。但jQuery对象根本不是函数,自然就抛出了那个类型错误。

快速修复方法

在第二个代码块的结尾});后面手动加上分号就行:

// add scroll effect on page refresh too 
$(function() { 
  var scroll = $(window).scrollTop(); 
  if (scroll >= 10) { 
    $(".mainMenu").addClass("scroll"); 
  } else { 
    $(".mainMenu").removeClass("scroll"); 
  } 
}); // 这里手动添加分号

// hamburger 
(function( $ ) { 
  $( document ).ready( function() { 
    var hamburger = $('#hamburger-icon'); 
    hamburger.click(function() { 
      hamburger.toggleClass('active'); 
      return false; 
    }); 
  }); 
})( jQuery ); 

通用排查思路

下次再碰到这类错误,可以按以下步骤快速定位问题:

  • 先看错误栈:打开浏览器控制台,找到错误触发的代码行,通常就是两个表达式衔接的地方。
  • 检查分号衔接:重点关注前一个表达式是否以})、]、)结尾,后一个表达式是否以(、[、+、-开头——这种组合下ASI不会自动补分号,必须手动添加。
  • 逐步注释验证:把怀疑的代码块逐个注释掉,看错误是否消失,快速锁定问题发生的代码段。比如你可以先注释掉汉堡菜单的代码,如果错误没了,就说明是第二个和第三个代码块的衔接问题。
  • 格式化代码:用代码格式化工具(比如VS Code的Prettier插件)整理代码,分号缺失的问题会变得更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:24:10