生成器函数
0 Views 前端 with
本文字数:474 字 | 阅读时长 ≈ 2 min

生成器函数

0 Views 前端 with
本文字数:474 字 | 阅读时长 ≈ 2 min

本节主要讲述生成器函数

生成器函数

一个简单的例子

1
2
3
4
5
6
7
8
9
10
11
function* one(){
yield "one"
yield "two"
yield "three"
}

var weaponsIter = one();
console.log(weaponsIter.next().value) //"one"
console.log(weaponsIter.next().value) //"two"
console.log(weaponsIter.next().value) //"three"
console.log(weaponsIter.next().done) //undefined

迭代器对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function* one() {
yield "one"
yield two()
yield "three"
}

function* two() {
yield "two"
}

var weaponsIter = one();
console.log(weaponsIter.next().value)
console.log(weaponsIter.next().value)
console.log(weaponsIter.next().value)
console.log(weaponsIter.next().done)

var weaponsIter = one();调用生成器得到一个迭代器对象

第一次调用生成器的next()方法让生成器代码执行到第一个yield表达式

交互

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function* Ninja(action){
const imposter = yield ("第一个参数--"+action)

/* imposter作为第二次yield的参数,是下次要用到的参数 */

yield ("第二个参数--"+imposter)
}

const iterator = Ninja("Qian");

const result1 = iterator.next()
const result2 = iterator.next("Wei")

console.log(result1.value)
console.log(result2.value)

生成器内部构成

调用一个生成器不会实际的执行它,相反,它创建一个新的迭代器,通过该迭代器我们才能从生成器中请求值。

在生成器生成了一个值后,生成器会挂起执行并等待下一下请求的到来。

Dec 21, 2018