以 async/await 为例的 V8 中 JavaScript 语法糖转换机制

问题描述 投票:0回答:1

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);
    })
};

我尝试在多种查询变体中使用谷歌,但没有有关转换语法糖的信息

javascript async-await v8 javascript-engine
1个回答
0
投票

(这里是 V8 开发者。)

没有单一的机制,这取决于情况。

有些东西在解析器中就被脱糖了。
有些东西在字节码创建过程中被脱糖。
有些可能可以脱糖的东西有直接支持,通常是出于性能原因。

具体针对

await
,请参阅 字节码生成器 及其调用的 内部函数。因此,虽然其中涉及一些脱糖,但这并不是您在问题中所概述的。

请注意,这些实施细节可能并且确实会随着时间的推移而发生变化。因此,当您有具体需要了解时,请阅读当前的源代码;不要依赖可能已经过时的多年陈述(就像这个答案很快就会变得足够☺)。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.