相关疑难解决方法(0)

JS生成器:`return yield`与`yield`有什么不同?

function* foo() {
  yield 123
};

// - - -

function* foo() {
  return yield 123
};
Run Code Online (Sandbox Code Playgroud)

我似乎无法证明两者之间的区别.

  • 有明显的区别吗?
  • 应该return用在发电机上吗?

javascript generator ecmascript-6

17
推荐指数
2
解决办法
5360
查看次数

ES6生成器机制-传递给next()的第一个值在哪里?

将参数传递给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)

我对这种生成器的行为的心理模型是这样的:

  1. 返回foo1并在yield处暂停(next返回的调用foo1将作为参数42
  2. 暂停直到下一次通话 next
  3. 在下一个收益率上继续行,var x = 1 + 42因为这是先前收到的参数
  4. 打印 x = 43 …

javascript yield generator

4
推荐指数
1
解决办法
387
查看次数

ES6 Yield:第一次调用 next() 的参数会发生什么?

考虑这段代码:

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)

ecmascript-harmony

1
推荐指数
1
解决办法
740
查看次数