这里可以先打印一下普通函数和异步(async)函数的结构,如下图
可以看出两者原型链,普通函数的原型链指向的是一个函数,异步(async)函数原型链指向的是一个AsyncFunction,这时就会想到通过判断原型链的方式判断,就如下图
而AsyncFunction是没有暴露给JS的。但是异步(async)函数的原型链上有一个Symbol(Symbol.toStringTag)标记,这个标记会影响Object.prototype.toString.call的输出,就可以看出
但是不能通过typeof来判断,typeof对于两者都是‘function’。