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

购物平台网站建设框架小程序编辑

购物平台网站建设框架,小程序编辑,做承诺的网站,微信网站需要一个域名要怎么做一、迭代器(Iterator):数据遍历的统一协议 1. 迭代器协议的本质 **迭代器协议(Iterator Protocol)** 是一种标准化的数据访问接口,它要求对象实现一个 next() 方法,每次调用返回包含 { valu…

 一、迭代器(Iterator):数据遍历的统一协议  

1. 迭代器协议的本质

**迭代器协议(Iterator Protocol)** 是一种标准化的数据访问接口,它要求对象实现一个 `next()` 方法,每次调用返回包含 `{ value, done }` 的对象。  
- **`value`**: 当前遍历的值  
- **`done`**: 布尔值,表示遍历是否结束  

const arrayIterator = {data: [1, 2, 3],index: 0,next() {return this.index < this.data.length ? { value: this.data[this.index++], done: false }: { value: undefined, done: true };}
};console.log(arrayIterator.next()); // { value: 1, done: false }

此迭代器通过内部维护的 `index` 状态,逐步遍历数组元素。

 2. 可迭代对象(Iterable)  

若对象实现了[Symbol.iterator]() 方法,则称为 可迭代对象。该方法返回一个迭代器,使得对象可被 `for...of` 等语法消费。

自定义可迭代链表:  

class LinkedList {constructor() {this.nodes = [];}add(node) {this.nodes.push(node);}[Symbol.iterator]() {let index = 0;return {next: () => ({value: this.nodes[index++],done: index > this.nodes.length})};}
}const list = new LinkedList();
list.add('a'); list.add('b');
for (const node of list) {console.log(node); // 'a', 'b'
}

 二、生成器(Generator):迭代器的超级语法糖  

1. 生成器的核心机制

生成器函数(function*)返回一个 生成器对象,该对象既是迭代器,也是可迭代对象。其核心能力在于:  
- 暂停与恢复执行:通过 `yield` 关键字中断函数,保留上下文状态  
- 双向通信:`yield` 可向外传递值,外部可通过 `next(arg)` 向内注入值  生成器执行流程  

function* gen() {const a = yield 1;const b = yield a + 2;yield b * 3;
}const g = gen();
console.log(g.next());      // { value: 1, done: false }
console.log(g.next(10));    // { value: 12, done: false } (a = 10)
console.log(g.next(5));     // { value: 15, done: false } (b = 5)
console.log(g.next());      // { value: undefined, done: true }

**关键点**:每次 `next(arg)` 的 `arg` 会赋值给左侧 `yield` 表达式的返回值。

2. 生成器的底层模型  

生成器本质是 **协程(Coroutine)** 的轻量级实现。与线程不同,协程的切换由开发者显式控制,且不涉及系统内核,因此极其高效。  

- 执行上下文栈:生成器暂停时,其执行上下文(变量、作用域链)被保存,恢复时重新压入栈顶  
- 状态机转换:Babel 等工具将生成器转换为带有 `switch-case` 的状态机代码  

 三、高级应用场景  

1. 异步流程控制:生成器的革命性贡献  

在 `async/await` 普及前,生成器 + Promise 是处理异步代码的终极方案,其核心模式如下:  

实现自动执行器  

function run(generator) {const g = generator();function handle(result) {if (result.done) return result.value;return result.value.then(data => handle(g.next(data)),err => handle(g.throw(err)));}return handle(g.next());
}run(function* fetchUser() {const user = yield fetch('/api/user');const posts = yield fetch(`/api/posts?userId=${user.id}`);return { user, posts };
}).then(data => console.log(data));

此模式直接催生了 `async/await` 的诞生,两者在 Babel 中被编译为类似的生成器代码。

 2. 无限数据流与惰性计算  

生成器天然适合处理大规模或无限序列,仅在需要时计算值,避免内存爆炸。

斐波那契数列  

function* fibonacci() {let [prev, curr] = [0, 1];while (true) {yield curr;[prev, curr] = [curr, prev + curr];}
}const seq = fibonacci();
console.log(seq.next().value); // 1
console.log(seq.next().value); // 1
console.log(seq.next().value); // 2
// 可无限调用,但每次只计算一个值

3. 复杂状态机  

生成器通过 `yield` 管理状态转移,代码比传统状态机更简洁。

 交通灯状态机  

function* trafficLight() {while (true) {yield 'Red';          // 返回 'Red'yield delay(3000);   // 返回 Promise,暂停 3 秒yield 'Green';        // 返回 'Green'yield delay(2000);   // 返回 Promise,暂停 2 秒yield 'Yellow';       // 返回 'Yellow'yield delay(1000);   // 返回 Promise,暂停 1 秒}
}function delay(ms) {return new Promise(resolve => setTimeout(resolve, ms));
}// 使用
const light = trafficLight();function runTrafficLight() {const { value, done } = light.next();if (done) return; // 如果生成器结束,退出if (typeof value === 'string') {console.log(value); // 更新 UI 为当前颜色runTrafficLight();  // 继续下一步} else if (value instanceof Promise) {value.then(() => runTrafficLight()); // 等待 Promise 完成后再继续}
}runTrafficLight(); // 启动交通灯

四、生成器与迭代器的未来  

1. 异步迭代器(Async Iterator)  

ES2018 引入的异步迭代器,允许迭代异步数据源(如数据库流、WebSocket):  
async function* asyncCounter() {let i = 0;while (i < 3) {await sleep(1000);yield i++;}
}
(async () => {for await (const num of asyncCounter()) {console.log(num); // 0, 1, 2(每秒输出一个)}
})();

 


文章转载自:

http://DDMrHDBN.wnbtz.cn
http://PN2p0S6G.wnbtz.cn
http://W3enIaSa.wnbtz.cn
http://72M3ZmNu.wnbtz.cn
http://xIfV2TZz.wnbtz.cn
http://NB7NdDpu.wnbtz.cn
http://Gwc5UFFn.wnbtz.cn
http://DrNDH37t.wnbtz.cn
http://GsgRPGOH.wnbtz.cn
http://DH9bnSxN.wnbtz.cn
http://q51PEZJ6.wnbtz.cn
http://8jFpWPax.wnbtz.cn
http://dnaJzhBn.wnbtz.cn
http://Erk21Lub.wnbtz.cn
http://ZIUgae6b.wnbtz.cn
http://Odc6EyHS.wnbtz.cn
http://tKHCphij.wnbtz.cn
http://bXgdKXsk.wnbtz.cn
http://vXkGvkQr.wnbtz.cn
http://zEU0sNKW.wnbtz.cn
http://5CoF0Dy0.wnbtz.cn
http://MMlu0Xjh.wnbtz.cn
http://Jk9cDulv.wnbtz.cn
http://btbrf8ui.wnbtz.cn
http://CuHlwnPb.wnbtz.cn
http://D8wzLFRK.wnbtz.cn
http://MP04vj2y.wnbtz.cn
http://NhibxcS7.wnbtz.cn
http://ezKYz8ie.wnbtz.cn
http://gNsVb31t.wnbtz.cn
http://www.dtcms.com/wzjs/705718.html

相关文章:

  • 网站信息内容建设局通报包装印刷
  • 处方药可以做网站吗白云电子商务网站建设
  • 网站优化一般要怎么做电商怎么做的
  • 毕业设计做旅游网站建站外贸企业官网推广
  • 中山哪家做网站好有没有淄博张店做兼职工作的网站
  • 腾讯云网站搭建seo网站推广招聘
  • 丹阳网站建设如何中国建筑公司排名一览表
  • 网站手机验证码怎么做首商网官网
  • dede 企业网站模板品牌形象设计包括什么
  • 营销型网站的现状dedecms资源下载模板
  • 静态网站托管天津建设协会网站
  • 双流网站建设品牌设计主要做哪些内容
  • 企业网站建设移动天津软件开发培训机构
  • 萧山工程建设有限公司网站潍坊做网站哪家公司最好
  • vs做的网站怎么放到iis中中国建设银行合肥招聘信息网站
  • asp网站服务建设俄语网站制作
  • 大连网站制作公司费用多少猪八戒网站做推广怎么样
  • php网站后台模版嘉兴网站设计
  • 给个营销型网站国外企业邮箱推荐
  • 阿里云网站建设部署与发布试题答案苏州怎么做网站
  • 怎么阻止网站备案信息修改网站负责人
  • 惠州做网站优化平台推广营销方案
  • 网站设计和程序员任县网站建设
  • 京东怎么做轮播图链接网站昌大建设和天元
  • cms管理手机网站模板缪斯设计集团
  • 宁波网站推广肇庆网络推广
  • 网页设计主页面结构优化是什么意思
  • 手机网站大全排行软件商城免费下载安装包
  • 在线画流程图的网站旅游网站建设风险分析
  • 哪些网站可以接点私活做的网络规划设计师如何聘副高职称