当前位置: 首页 > news >正文

毕业答辩问题怎么做的这个网站淘宝网电脑版

毕业答辩问题怎么做的这个网站,淘宝网电脑版,wordpress 管理员权限,在线图片编辑器手机版目录 Iterator 的作用 Iterator 的遍历过程 Symbol.iterator方法 实现iterator接口的自定义类示例 Generator函数 迭代器对象的next方法的运行逻辑 迭代器对象除了具有next方法,还可以具有return方法。 Iterator 的作用 为各种数据结构,提供一个统…

目录

Iterator 的作用

Iterator 的遍历过程

Symbol.iterator方法

实现iterator接口的自定义类示例

Generator函数

迭代器对象的next方法的运行逻辑

迭代器对象除了具有next方法,还可以具有return方法。


Iterator 的作用

为各种数据结构,提供一个统一的、简便的访问接口。

使得数据结构的成员能够按某种次序排列。

任何数据结构只要部署 Iterator 接口,就可以完成遍历操作。Iterator 接口约定对象必须具备Symbol.iterator方法,且该方法返回一个迭代器对象。

Iterator 的遍历过程

创建一个指针对象(迭代器),指向当前数据结构的起始位置。 也就是说,迭代器对象本质上,就是一个指针对象。该对象必定有一个名为next的方法。

第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员;第二次调用指针对象的next方法,指针就指向数据结构的第二个成员;不断调用指针对象的next方法,直到它指向数据结构的结束位置。

Symbol.iterator方法

默认的 Iterator 接口部署在数据结构的Symbol.iterator方法。也就是说,一个数据结构只要具有Symbol.iterator方法,就可以认为是“可遍历的”(iterable)。

原生具备 Iterator 接口的数据结构:

  • Array
  • Map
  • Set
  • String
  • TypedArray(类型化的数组)
  • 函数的 arguments 对象
  • NodeList 对象
let arr = ["a", "b", "c"];
let iter = arr[Symbol.iterator]();
console.log(iter.next());
console.log(iter.next());
console.log(iter.next());
console.log(iter.next());

一个对象如果要具备可被for...of调用的 Iterator 接口,就必须在Symbol.iterator上部署生成迭代器对象的方法。

迭代器对象必须具备next方法。next方法必须返回一个具备value和done的对象。

{value: undefined, done: true}

value为每次迭代的值,迭代结束时该值为undefined。

done为布尔值,表示迭代是否结束,结束为true,否则为false。

实现iterator接口的自定义类示例

class Rander {constructor(start, stop, step) {this.start = start;this.stop = stop;this.step = step;}[Symbol.iterator]() {let range = this;return {next() {let value = range.value;if (value < range.stop) {range.value += range.step;return { done: false, value: value };}return { done: true, value: undefined };},};}
}
function range(start, stop, step = 1) {return new Rander(start, stop, step);
}
for (let i of range(0, 9, 2)) {console.log(i);
}
let num = [...range(0, 9, 2)];
console.log(num);

Generator函数

生成器函数是用来产生一个生成器对象的。定义生成器函数需要使用*。

通过Generator函数实现Iterator 接口迭代。

let obj = {
name1: "Tom",
name2: "Jerry",
name3: "Mickey",
name4: "Miney",
*[Symbol.iterator]() {
yield this.name1;
yield this.name2;
yield this.name3;
},
};
console.log(obj[Symbol.iterator]().next());
console.log([...obj]);
for (let k of obj) {
console.log(k);
}

由于 Generator 函数返回的迭 代器对象,只有调用next方法才 会遍历下一个内部状态,所以其实 提供了一种可以暂停执行的函数。 yield表达式就是暂停标志。

迭代器对象的next方法的运行逻辑

  1. 遇到yield表达式,就暂停执行后面的操作,并将紧跟在yield后面的那个表达式的值作为返回的对象的value属性值。
  2. 下一次调用next方法时,再继续往下执行,直到遇到下一个yield表达式。
  3. 如果没有再遇到新的yield表达式,就一直运行到函数结束,直到return语句为止,并将return语句后面的表达式的值作为返回的对象的value属性值。
  4. 如果该函数没有return语句(即没有返回值),则返回的对象的value属性值为undefined。

迭代器对象除了具有next方法,还可以具有return方法。

如果for...of循环提前退出(通常是因为出错,或者有break语句),就会调用return方法。如果一个对象在完成遍历前,需要清理或释放资源,就可以部署return方法。

http://www.dtcms.com/a/572390.html

相关文章:

  • 网站空间租wordpress公众号抓取
  • 茶叶设计网站建设怎样自己做代刷网站
  • 横栏网站建设天津人工智能建站系统软件
  • 网站备案 登陆工厂弄个网站做外贸如何
  • 网站设计目标与背景豆瓣网网站建设
  • 一键生成淘宝主图的软件wordpress程序代码优化
  • 渭南市住房和城乡建设局官方网站蜗牛星际做网站
  • flash 做ppt的模板下载网站有哪些网站开发前后端分离要多少钱
  • 怎么使用模板建设网站做英文网站网站犯法吗
  • 宁波建网站价格网站建设文案
  • 做运营必看的网站百度爱采购推广一个月多少钱
  • 阿里云空间做的网站不收录17网一起做网站广州
  • 手机网站 代码格式网站整体营销方案
  • 网站服务器租用和托管WordPress Core 5.0
  • 佛山市桂城建设局网站珠海仿站定制模板建站
  • 优质的网站汤阴做网站
  • 艺纵网站建设产品经理做网站
  • 酷万网站建设最新企业网站
  • 免费源码资源源码站入口建材企业网站推广
  • 网站建设微商城做网站推广被骗
  • wordpress旅游网站如何做班级网站
  • 网站优化公司哪家好wordpress来建站
  • 租赁模板建站 网站的名称归属制作网页常用的软件有哪些
  • 域名申请好了 要怎么做网站wordpress 免费中文模板
  • 哪个网站做母婴用品好怎么自己创建网页
  • 织梦网站搬家品牌建设有哪些方面
  • 江西个人网站备案门户网站开发注意事项
  • wordpress自定义函数快推达seo
  • 江门市城乡建设局网站网站显示速度的代码
  • 重庆渝兴建设有限公司网站站长之家素材网站