<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <script> function *foo() { var x = yield 2; z++; var y = yield (x * z); console.log(x, y, z); } var z = 1; var it1 = foo(); var it2 = foo(); var val1 = it1.next(555).value; // 2 var val2 = it2.next(5555).value; // 2 // 得 next(20),这个传入值将是 var x = yield 的值, yield 表达式为 20, 故 x = 20 // 而此时 val1 是 var y = yield (x * 2) 中的 yield 返回值。 // 也就是说,一个 yield 要调用两次 next() 才能得到这个表达式的值。 val1 = it1.next( val2 * 10 ).value; val2 = it2.next(val1 * 5).value; it1.next(val2 / 2 ); </script> </body> </html>