这种语法怎么可能?

How is this syntax possible?

困惑:

我正在查看 async do {} 的 tc39 提案,而不是 (async()=>{})。我试图看看我是否可以通过使用关键字来以某种方式复制它。在这里,我发现了一些奇怪的东西:

new function() {
    console.log(crypto.getRandomValues(new Uint32Array(1))[0])
}
//This works but returns {}

上面的代码正常执行,但总是 return {}。当然,总是可以使用 void 运算符:

void new function() {
    console.log(crypto.getRandomValues(new Uint32Array(1))[0])
}
//This works and returns undefined

问题:

这个问题在评论中得到了回答,但我想做出一个被接受的答案,这样这个问题就可以被视为“已回答”。 javascript 中的关键字 new 创建了 function/class 的新实例。一个函数,不是一个异步函数,是一个function/class的实例,允许创建它并且运行。


此代码创建相同的产品 --

function example() {
    console.log('hello');
    return {
        process: 'finished'
    }
};
new example;

-- 就像这个代码。

new function() {
    console.log('hello');
    return {
        process: 'finished'
    }
};

由于对象的构造方式,对象必须 returned。这使得它不同于 IIFE。如果对象未 returned,则产品将为空白 {}。语法new async function() {}不正确的原因与class { async constructor() {} }相同。构造函数需要立即数 return 值,这会强制它们同步。