函数声明使用function关键字。函数体共包含4种。分别介绍一下:
-
普通函数体
function foo() {
// 函数体
}
-
异步函数体
async function foo() {
await sleep(3000)
}
-
生成器函数体
function* foo() {
yield 1;
yield 2;
yield 3;
}
- 异步生成器函数体
async function* foo() {
await sleep(3000);
yield 1;
}
带async的函数为异步函数,该函数是可以暂停执行,等待异步操作的函数,底层是Promise机制;
带*的函数为generator生成器函数,该函数可以理解为返回一个序列的函数,底层是iterator机制;
异步生成器函数则是二者的结合。
以上函数的区别在于:能否使用await或者yield语句。可以参考一下下面的表格:
类型 | yeild | await |
普通函数体 | NO | NO |
异步函数体 | NO | YES |
生成器函数体 | YES | NO |
异步生成器函数体 | YES | YES |