function* foo() {
yield 123
};
// - - -
function* foo() {
return yield 123
};
Run Code Online (Sandbox Code Playgroud)
我似乎无法证明两者之间的区别.
return用在发电机上吗?将参数传递给next()ES6生成器时,为什么忽略第一个值?更具体地讲,为什么这个输出x = 44而不是x = 43:
function* foo() {
let i = 0;
var x = 1 + (yield "foo" + (++i));
console.log(`x = ${x}`);
}
fooer = foo();
console.log(fooer.next(42));
console.log(fooer.next(43));
// output:
// { value: 'foo1', done: false }
// x = 44
// { value: undefined, done: true }
Run Code Online (Sandbox Code Playgroud)
我对这种生成器的行为的心理模型是这样的:
foo1并在yield处暂停(next返回的调用foo1将作为参数42)nextvar x = 1 + 42因为这是先前收到的参数x = 43 …考虑这段代码:
function foo(a) {
console.log("Mul =", a);
return a * 2;
};
function * process(start) {
// next() #1
var result = start;
console.log("Pre-processing =", result);
result = yield foo(result);
// next() #2
console.log("Process result 1 =", result);
result = yield foo(result);
// next() #3
console.log("Process result 2 =", result);
result = yield foo(result);
// next() #4
console.log("Process result 3 =", result);
return foo(result);
}
var it = process(1);
console.log("#1");
console.log("Next 1 =", /*#1*/it.next("bar"));
console.log("#2");
console.log("Next 2 =", /*#2*/it.next(3));
console.log("#3"); …Run Code Online (Sandbox Code Playgroud)