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),规避重复定义错误:
