[译]Understanding ECMAScript6 迭代器与生成器(未完)
迭代器在许多编程语言中被作为一种更易处理数据集合的方式被使用。在ECMAScript6中,JavaScript添加了迭代器,将其作为此语言的一个重要特征。当再加上新的方法和新的集合类型(比如集合与映射)时,迭代器对数据的高效处理变得更加重要。
什么是迭代器
迭代器不过是一个带有特定接口的对象。此接口由一个名为next()的返回一个结果对象的方法组成。该结果对象有两个属性,value,也就是next的值,还有done,一个布尔值,当没有更多的值要返回时就为true。迭代器保留了一个指向了值集合位置的内部指针,每次调用next(),返回下一个合适的值。
如果你在最后一个值被返回后调用next(),该方法返回的done是true,value包含了迭代器的返回值。返回值并不认为是数据集的一部分,而是相关数据的最终片段,或者如果不存在这样的数据就是undefined(这一概念在本章后面的生成器一节中会更加清晰)。
理解了这些,用ECMAScript5创建生成器就相当简单了,比如:
function createIterator(items) { var i = 0; return {
next: function() { var done = (i >= items.length);
var value = !done ? items[i++] : undefined; return {
done: done,
value: value
}; }
};
} var iterator = createIterator([1, 2, 3]); console.log(iterator.next()); // "{ value: 1, done: false }"
console.log(iterator.next()); // "{ value: 2, done: false }"
console.log(iterator.next()); // "{ value: 3, done: false }"
console.log(iterator.next()); // "{ value: undefined, done: true }" // for all further calls
console.log(iterator.next()); // "{ value: undefined, done: true }"
createIterator()函数在此例中返回了一个带有next()方法的对象。方法每次被调用时,items
数组中的下一个值会被作为value返回。当i为4时,items[i++]返回undefined且done为true,这满足了ECMAScript6中生成器特殊的最后一种情况。
ECMAScript6在许多地方利用了生成器,使数据集合更易处理。因此,有一个好的基本理解有助于你更好的从整体上理解这门语言。
生成器
//to be continue
生成器函数表达式
//to be continue
生成器对象方法
//to be continue
生成器类方法
//to be continue
可迭代对象和for-of
//to be continue
访问默认迭代器
//to be continue
创建可迭代对象
//to be continue
内置迭代器
//to be continue
集合迭代器
//to be continue
字符串迭代器
//to be continue
节点列表迭代器
//to be continue
高级功能
//to be continue
给迭代器传递参数
//to be continue
在迭代器中抛出错误
//to be continue
生成器返回语句
//to be continue
委托生成器
//to be continue
异步任务调度
//to be continue
总结
//to be continue
最新文章
- .NET中STAThread和MTAThread
- 初识SSH框架
- CRM SQL 创建活动 ActivityPointer
- [ CodeVS冲杯之路 ] P1171
- 了解常见的浏览器内核 Trident,Geckos,Presto,Webkit
- 点滴的积累---J2SE学习小结
- java中的反射,invoke方法[转]
- flask安装首页显示
- Dom编程(二)
- 实验测试之------创建DBlink,查询远端的yang用户下的abcdedfa表,创建同义词
- 排查Full GC
- 泛型与object
- Jquery回到顶部功能
- IOS HTTP访问端口
- malloc/free 与 new/delete 区别
- 五、Django之路由系统
- Struts2实现登录流程
- StarUML 破解方法
- Kali 中文家目录改英文目录
- js中的自定义异常处理函数