跳转到主内容
极星编程网:以代码为星,赴技术山海!

Khan Academy 编辑器中无法使用 class 关键字的解决方案

Khan Academy 的 HTML 编辑器因内置过时的 JavaScript 解析器(Esprima 旧版)而无法识别 ES2015+ 语法(如 class),导致“Unexpected reserved word”错误;可通过修改 Khan Academy 的实时网页编辑器(Live Editor)并非运行在标准浏览器环境中,而是通过自研的 Slowparse 工具链对 HTML/JS 进行预解析与校验。该工具依赖一个近十年前的 Esprima 版本,仅支持 ECMAScript 5(ES5)语法,因此原生 class、let、const、箭头函数等 ES2015+ 特性均会触发 Unexpected reserved word 报错—— 这不是你的代码问题,而是平台限制 。 ✅ 推荐解决方案:使用 type="module" 最简洁、语义清晰且兼容性良好的绕过方式是将
✅ 优势 : type="module" 被现代浏览器原生支持,Khan 编辑器 不会对其内容进行 Slowparse/Esprima 静态检查 ,从而允许使用 class、import/export、await 等新特性; 模块自动启用严格模式,变量默认为块级作用域(不污染全局),避免命名冲突; 符合现代 Web 开发规范,便于后续迁移。 ⚠️ 注意事项 : 模块中的顶层变量、函数、类 不会挂载到 window 对象上 (即非全局)。若需跨脚本访问,应显式导出并导入(但 Khan 编辑器暂不支持多文件模块拆分); 若需操作 canvas 或 DOM 元素,请确保脚本执行时 DOM 已就绪(模块默认延迟执行,通常已满足)。 ? 备选方案:使用非标准 type + IIFE 若需保留全局可访问性(例如供 Khan 的绘图 API 调用),可选用未被 Slowparse 识别的合法 type 值(如 application/javascript、text/ecmascript),并主动封装为立即执行函数表达式(IIFE),规避重复定义错误:
? 关键点说明 : Khan 编辑器仅对 type=""(空值)和 type="text/javascript" 执行严格语法校验;其他合法 MIME 类型(见 MDN: