ES6学习笔记——Generator.prototype.return()

学习内容引自阮一峰老师的《ES6标准入门》,第16章的第5节Generator.prototype.return()

--------------------------------------------------分割符(学习笔记)-----------------------------------------

笔记一

    Generator函数返回的遍历器对象的return方法,和在Generator函数内部定义的return语句是等价的,即

function *generator() {
    yield 1;
}

let gen = generator();
gen.next();//{value:1,done:false}
gen.return(2);//{value:2,done:false}

    等价于

function *generator() {
    yield 1;
    return 2;
}

let gen = generator();
gen.next();//{value:1,done:false}
gen.next();//{value:2,done:false}

笔记二

    原文:如果Generator函数内部有try...finally代码块,那么return方法会推迟到finally代码块执行完在执行。

    修正:如果Generator函数内部有try...finally代码块,同时next()方法已进入try代码块,那么return方法会推迟到finally代码块执行完在执行;否则直接执行return方法。

//原文代码
function* numbers () {
  yield 1;
  try {
    yield 2;
    yield 3;
  } finally {
    yield 4;
    yield 5;
  }
  yield 6;
}
var g = numbers();
g.next() // { value: 1, done: false }
g.next() // { value: 2, done: false }
g.return(7) // { value: 4, done: false }
g.next() // { value: 5, done: false }
g.next() // { value: 7, done: true }
    验证代码如下:
function *numbers() {
    yield 1;
    try{
        yield 2;
        yield 3;
    }finally {
        yield 4;
        yield 5;
    }
    yield 6;
}

let g = numbers();
g.next();//{ value: 1, done: false }
//去掉这一行代码,则未进入try语句块,所以后面是直接执行return(7)方法。
//console.log(g.next());
g.return(7);//{ value: 7, done: true }
g.next();//{ value: undefined, done: true }
g.next();//{ value: undefined, done: true }


    

猜你喜欢

转载自blog.csdn.net/sinat_36521655/article/details/80312850
今日推荐