阿孜去面试-生成器

83 阅读1分钟

路很长,一步一步走,走累了休息一下。

Krul_splash.jpg >> 对promise熟悉吗,那说一下生成器吧😂

<< 英文名叫generator

和普通函数不同的普通函数只能一下走完,生成器函数可以暂停,简单的说就是可以手动让函数一步一步一步的走下去。

生成器会构造一个迭代器(iterator)

let a = {}
console.log(a[Symbol.iterator]); // undefined
const b = Object.keys(a) 
console.log(b[Symbol.iterator]); // [Function: values]
console.log(b[Symbol.iterator]()); // Object [Array Iterator] {}
function* foo(x) {
  console.log("start");
  const abc = x * 2;
  var y = x * (yield abc);
  yield y;
  yield "end";
  return 123;
}
const it = foo(3);

// 启动 直到(yield abc)
const res = it.next();

//返回abc的值
console.log(res); // { value: 6, done: false }

// y = x * 9    这里的传参让 (yield abc) = 9
console.log(it.next(9)); //{ value: 27, done: false }

// 返回y
console.log(it.next("abc")); // { value: 'end', done: false }

// 返回return的值 如果没有return就是undefined
console.log(it.next()); // { value: 123, done: true }