ES6学习之路-1

来源:互联网 发布:集团网络电话交换机 编辑:程序博客网 时间:2024/05/19 20:21

1 Generator 生成器函数

   1.next方法的参数表示上一个yield表达式的返回值,所以在第一次使用next方法时,传递参数是无效的。

function* foo(x) { var y = 2 * (yield (x + 1)); var z = yield (y / 3); return (x + y + z); } var a = foo(5); a.next() // Object{value:6, done:false}a.next() // Object{value:NaN, done:false}a.next() // Object{value:NaN, done:true}var b = foo(5); b.next() // { value:6, done:false }b.next(12) // { value:8, done:false }b.next(13) // { value:42, done:true }    2.第一次调用next方法时,就能够输入值,可以在 Generator 函数外面再包一层。
function wrapper(generatorFunction) { return function (...args) { let generatorObject = generatorFunction(...args); generatorObject.next(); return generatorObject; }; }const wrapped = wrapper(function* (){console.log(`First input: ${yield}`);(此处为反引号)return 'DONE';});wrapped().next('hello!');


  3 for...of循环可以自动遍历 Generator 函数时生成的Iterator对象,且此时不再需要调用next方法。

function* fibonacci() { let [prev, curr] = [0, 1]; for (;;) { [prev, curr] = [curr, prev + curr]; yield curr; } } for (let n of fibonacci()) { if (n > 1000) break; console.log(n); }


 
原创粉丝点击