好的装修网站,东莞人才招聘网最新招聘信息,寰宇seo,昆明网络推广公司Generator 函数是 ES6 提供的一种异步编程解决方案#xff0c;语法行为与传统函数完全不同。 形式上#xff0c;Generator 函数是一个普通函数#xff0c;但是有两个特征。一是#xff0c;function关键字与函数名之间有一个星号#xff1b;二是#xff0c;函数体内部使用… Generator 函数是 ES6 提供的一种异步编程解决方案语法行为与传统函数完全不同。 形式上Generator 函数是一个普通函数但是有两个特征。一是function关键字与函数名之间有一个星号二是函数体内部使用yield表达式定义不同的内部状态yield在英语里的意思就是“产出”。 function* generatorFunction() {yield Hello;yield World;yield !;
}// 创建一个迭代器对象
const iterator generatorFunction(); Generator 函数的调用方法与普通函数一样也是在函数名后面加上一对圆括号。不同的是调用 Generator 函数后该函数并不执行必须调用遍历器对象的next方法使得指针移向下一个状态。也就是说每次调用next方法内部指针就从函数头部或上一次停下来的地方开始执行直到遇到下一个yield表达式或return语句为止。换言之Generator 函数是分段执行的yield表达式是暂停执行的标记而next方法可以恢复执行。
// 调用迭代器的next()方法获取值
console.log(iterator.next()); // { value: Hello, done: false }
console.log(iterator.next()); // { value: World, done: false }
console.log(iterator.next()); // { value: !, done: false }
console.log(iterator.next()); // { value: undefined, done: true } 总结 调用 Generator 函数返回一个遍历器对象代表 Generator 函数的内部指针。以后每次调用遍历器对象的next方法就会返回一个有着value和done两个属性的对象。value属性表示当前的内部状态的值是yield表达式后面那个表达式的值done属性是一个布尔值表示是否遍历结束。
ES6 没有规定function关键字与函数名之间的星号写在哪个位置。这导致下面的写法都能通过。
function * foo(x, y) { ··· }
function *foo(x, y) { ··· }
function* foo(x, y) { ··· }
function*foo(x, y) { ··· }
由于 Generator 函数仍然是普通函数所以一般的写法是第三种即星号紧跟在function关键字后面。