为何同一段JavaScript代码在Chrome控制台和JSFiddle运行结果不一致?
运行结果差异原因说明
现有代码如下:
const thenable = { then: function(callback) { setTimeout(() => callback(2), 100); } }; const value = await thenable; console.log(value);// 控制台输出2,JSFIDDLE中报错
出现运行差异的核心原因是两个环境对顶层await特性的支持度不同:
- Chrome开发者工具控制台默认支持顶层await特性:该特性在ES2022被正式纳入ECMAScript标准,允许在模块的顶层作用域直接使用
await关键字,无需嵌套在async函数内部。Chrome为了优化调试体验,默认开启了该特性支持,所以代码执行合法,await正常解析thenable对象后拿到返回值2,控制台正常输出。 - JSFiddle运行环境默认未开启顶层await支持:JSFiddle的默认JS执行环境遵循旧版语法规则,要求
await必须写在async函数内部才能被识别为合法语法,顶层直接使用await不符合语法要求,因此直接抛出SyntaxError错误。
内容的提问来源于stack exchange,提问作者Aditya Gupta
相关产品推荐
相关产品推荐

