代码请教

来源:2-56 Syntax(1)

Bizarre_Lion

2019-12-03

function * gen(){
let val 

val = yield [1,2,3]
console.log(val)

}

const l = gen()

l.next()
l.next() 

这章节听得我模模糊糊晕头转向 ,老师你说第一次 next 执行是遇到 yield 停止,第一次的值 为 空
第二次 执行 的时候 没有 yield 了,是不是 会把 yield 后面的数组返回给 val console.log(val) 输出应该是 数组呀 ?为啥是undefined ?

写回答

2回答

薇笑的夏娃

2019-12-26

var foo = yield expression 语句,yield 左侧变量 foo 的值将在下一次调用 next() 方法时获得,并且等于调用时 next() 方法的参数。

function * gen(){
let val 

val = yield [1,2,3] 
// 第一次调用next(),运算 yield[1,2,3],返回的是个对象{value:[1,2,3],done:false
// 此时只运算量yield表达式,并没有将yield表达式的值即调用next()后的值赋值给val

console.log(val)
// 第二次调用next()方法时,会将next()的参数赋值给val,代码中next()并没有传递参数,
// 所以输出val是undefined
// 若是在调用第二个next(666)传递一个参数666,就会发现console.log(val)的输出是666了
}

const l = gen()

l.next()
l.next()


3
0

快乐动起来呀

2019-12-05

你在控制台看下第一个 l.next() 的输出是什么,是一个对象,这个对象有两个属性分别是value:[1,2,3],done:false,没有问题啊。第二个 l.next() 因为没有遇到 yield 就执行结束了,所以是 {value: undefined, done: true},有什么问题呢?

1
0

再学JavaScript ES(6-10)全版本语法大全

前端无门槛学习,从ES6到ES10,一套课程掌握JS最新语法

1182 学习 · 336 问题

查看课程