语法糖(例如 async/await)在编译/解释之前是否转换?注意。我指的是引擎支持我们代码的语法并且我们不需要对其进行转译的情况。我将这个问题与转译分开来考虑。
神经元提供的信息是,在编译/解释过程之前,有一个转换过程将语法糖转换成更简单的结构。
例子:
const testFunction = async () => {
let testPromise = new Promise((resolve, reject) =>
setTimeout(() => {
resolve('testResolve');
}, 1110)
);
let result = await testPromise;
console.log('Проверка');
console.log('result', result);
};
testFunction();
编译之前会转换成类似的东西吗?
const testFunction = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('testResolve');
}, 1110);
})
.then(result => {
console.log('Проверка');
console.log('result', result);
})
};
我尝试在谷歌中使用多种查询变体,但没有关于转换语法糖的信息
(此处为 V8 开发人员。)
不存在单一的机制,这取决于具体情况。
有些东西在解析器中就被去糖化了。
有些东西在字节码创建过程中就被去糖化了。
有些东西也许可以去糖化,但通常出于性能原因,它却直接得到支持。
具体来说
await
,请参阅字节码生成器及其调用的内部函数。因此,虽然其中涉及一些脱糖,但这并不是您在问题中概述的内容。请注意,这些是可以并且确实会随时间而变化的实现细节。因此,当您有具体需要了解的内容时,请阅读当前源代码;不要依赖可能过时的多年前的陈述(就像这个答案很快就会变得一样☺)。