gpt4 book ai didi

javascript - 为什么 `async` 不是保留字?

转载 作者:数据小太阳 更新时间:2023-10-29 03:50:24 27 4
gpt4 key购买 nike

据我所知,the specthe documentationawait 作为 async/await 特性中唯一的保留关键字。

我们可以将变量命名为 async 这一事实进一步证明了这一点:

例如:

var async = 5;
console.log(async) // this is fine

节点 (6.10)(也在 Repl.it 上)

Node

Chrome (59)

Chrome

火狐 (54)

Firefox

是因为向后兼容吗?我猜想许多代码库会为某些功能使用名称 async

这允许一些看起来很奇怪的代码示例:

async function async() {
var async = 5;
await async;
return async;
}
async().then(console.log)

无限递归 promise 链? (不是很重要,因为任何函数名称都允许这样做,但是这段代码看起来更加困惑)

async function async() {
await async();
}
// stackoverflow (might need to open your console to see the output)

最佳答案

async不需要是保留字,因为可以唯一标识。它可能发生的上下文是诸如

async function() { }
async () => { }
obj = { async foo() { } };

除了将 async 视为指示异步函数外,无法以任何方式解析所有这些。

另一方面,await 理论上可以用在如下语句中

async function foo() {
await(1);
}

这是模棱两可的; await 是在等待值 1,还是用参数 1 调用的函数?因此,await 需要是一个保留字(在异步函数内部;在外部,可以随意将其用作变量)。

请记住,JavaScript 自诞生以来经历了巨大的发展。许多词被指定为保留字,然后从未使用过,或者在技术上可能不需要的时候被指定为保留字。将 await 指定为保留字(在模块内),而不将 async 指定为保留字,是对语言更成熟理解的产物就其设计师而言。

关于javascript - 为什么 `async` 不是保留字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45336937/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com