下面小編就為大家?guī)硪黄钊肜斫鈐s generator數(shù)據(jù)類型。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。
1. 概述
generator 是ES6引入的新的數(shù)據(jù)類型, 看上去像一個函數(shù),除了使用return返回, yield可以返回多次。
generator 由function* 定義, (注意*號),
2. 例子
函數(shù)無法保存狀態(tài), 有時需要全局變量來保存數(shù)字;
2.1
'use strict';
function next_id(){
var id = 1;
while(id<100){
yield id;
id++;
}
return id;
}
// 測試:
var
x,
pass = true,
g = next_id();
for (x = 1; x < 100; x ++) {
if (g.next().value !== x) {
pass = false;
alert('測試失敗!');
break;
}
}
if (pass) {
alert('測試通過!');
}
2.2 一個無限循環(huán)的迭代器
function* idMaker(){
var index = 0;
while(true)
yield index++;
}
var gen = idMaker(); // "Generator { }"
console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
2.3Generator.prototype.next()
當?shù)Y(jié)束時, Generator.next().done ===true, 結(jié)束之前 ===false
function* gen() {
yield 1;
yield 2;
yield 3;
}
var g = gen(); // "Generator { }"
g.next(); // "Object { value: 1, done: false }"
g.next(); // "Object { value: 2, done: false }"
g.next(); // "Object { value: 3, done: false }"
g.next(); // "Object { value: undefined, done: true }"
2.4 Generator.prototype.return();
return方法 返回給定的參數(shù)值,并結(jié)束迭代器
example
function* gen() {
yield 1;
yield 2;
yield 3;
}
var g = gen();
g.next(); // { value: 1, done: false }
g.return("foo"); // { value: "foo", done: true }
g.next(); // { value: undefined, done: true }
注意 如果 done的值是true了, 再調(diào)用return,返回的值也是undefined
function* gen() {yield 1;}
var g = gen();
console.log(g.next());//{ value: 1, done: false }
console.log(g.next());//{ value: undefined, done: true }
console.log(g.return(1)); //{ value: undefined, done: true }
2.5 Generator.prototype.throw()
thorw()方法, 通過拋出一個異常到迭代器中,來重新獲得迭代器的執(zhí)行;
返回 帶有 value和done兩個屬性的object對象
function* gen() {
while(true) {
try {
yield 42;
} catch(e) {
console.log("Error caught!");
}
}
}
var g = gen();
var a = g.next();
// { value: 42, done: false }
var b = g.throw(new Error("Something went wrong"));
// "Error caught!"
// { value: 42, done: false }
console.log(a);
console.log(b.value+"::"+b.done);
以上這篇深入理解js generator數(shù)據(jù)類型就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考