问题

字节有一道面试题如何判断某个函数是否使用了async前缀

1
2
3
4
5
6
7
async function fn(){
 return void 0
}

function isAsyncFn(fn){
 //?
}

控制台查看

image-20250123221711330

对于普通函数而言:

image-20250123221750440

于是可以有:

1
2
3
function isAsyncFn(fn){
 return fn.constructor.prototype[Symbol.toStringTag] === 'AsyncFunction'
}

补充

可以看到,对于生成器函数,也可以使用Symbol.toStringTag来判断其类型,可有:

1
2
3
function isGenerateFn(fn){
 return fn.constructor.prototype[Symbol.toStringTag] === 'GeneratorFunction'
}
1