nem*_*035 10 javascript async-await
据我所知,规范和文档都是await该async/await功能中唯一保留的关键字.
我们可以命名变量这一事实进一步证明了这一点async:
例如:
var async = 5;
console.log(async) // this is fineRun Code Online (Sandbox Code Playgroud)
节点(6.10)(也在Repl.it上)
Chrome(59)
火狐(54)
是因为向后兼容吗?我猜许多代码库会使用async某些功能的名称.
这允许一些奇怪的代码示例:
async function async() {
var async = 5;
await async;
return async;
}
async().then(console.log)Run Code Online (Sandbox Code Playgroud)
无限递归承诺链?(不是很重要,因为任何函数名称都允许这样做,但是这段代码看起来更令人困惑)
async function async() {
await async();
}
// stackoverflow (might need to open your console to see the output)Run Code Online (Sandbox Code Playgroud)
小智 10
async不需要是保留字,因为它可以被唯一标识.它可能出现的背景是那些
async function() { }
async () => { }
obj = { async foo() { } };
Run Code Online (Sandbox Code Playgroud)
除了看到async指示异步函数之外,所有这些都无法以任何方式解析.
另一方面,await理论上可以用在诸如此类的陈述中
async function foo() {
await(1);
}
Run Code Online (Sandbox Code Playgroud)
这是模棱两可的; 正在await等待该值1,还是使用参数调用的函数1?因此,await需要一个保留字(在异步函数内部;外部,随意使用它作为变量).
请记住,JavaScript自其起源以来已经发生了很大变化.许多单词被指定为保留,然后从未使用过,或者在技术上它们可能不需要被指定为保留.指定await为保留字(在模块内),而非指定async为保留字,是其设计者对语言的更成熟理解的产物.
| 归档时间: |
|
| 查看次数: |
625 次 |
| 最近记录: |