06 Web全栈 ES6规范(可迭代协议和迭代器协议)

news/2024/7/10 23:17:55 标签: 前端, es6, javascript

Iterator 和for…of循环

迭代器协议
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Iteration_protocols

可迭代协议和迭代器协议

// 迭代器协议 有next函数 返回done value
var isHomeYou = {
	cursor: 0,
	next () {
		const actions = ['douyin', 'chifan', 'shuijiao']
		if (this.cursor > 2) {
			return {
				done: true
			}
		}
		return {
			done: false,
			value: actions[this.cursor++]
		}
	},
	// 可迭代协议
	[Symbol.iterator]() {
   	 	return this;
  	},
}

为什么要有两个协议
不可能知道一个特定的对象是否实现了迭代器协议,然而创造一个同事满足迭代器协议和可迭代协议的对象是很容易的。这样就允许一个迭代器能被不同希望迭代的语法方式所使用。因此,很少只实现迭代器协议而不实现可迭代协议。

都有哪些语法或特征,使用或实现了可迭代协议与迭代器协议
for…of / … / Array.from 使用了迭代器协议
[] / Set / Map / generator 实现了Iterators

Generator函数与异步应用

Generator函数返回的是实现了可迭代协议与迭代器协议的对象
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Generator

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

const gen = generator(); // "Generator { }"

console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3

// next传递参数

async

async 函数是使用async关键字声明的函数。async 函数是 AsyncFunction 构造函数的实例,并且其中允许使用 await 关键字。async 和 await 关键字让我们可以用一种更简洁的方式写出基于 Promise 的异步行为,而无需刻意地链式调用 promise。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/async_function

function resolveAfter2Seconds() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('resolved');
    }, 2000);
  });
}

async function asyncCall() {
  console.log('calling');
  const result = await resolveAfter2Seconds();
  console.log(result);
  // Expected output: "resolved"
}

asyncCall();

http://www.niftyadmin.cn/n/478361.html

相关文章

React state 的生命周期

Recoil 的全局状态(global state)生命周期并不是由 Recoil 库直接管理的,而是由包含全局状态的顶层组件(如根组件或应用程序的主组件)创建和管理的。这个组件可能会包含 Recoil 的 RecoilRoot 组件,用于提供…

react + antDesign新手进阶学习指南

基础知识点 1、react中的状态管理。 和vue中的状态管理有些相似,只不过react中是依托于mobx的。 举例写法: 创建store.ts import { observable, action } from mobx export class Store {observable status 0action getStatus async () > {} } export default…

pytorch笔记:文本分类项目及多GPU分布式训练代码

来自B站视频,API查阅,TORCH.NN nn.init.xavier_uniform_(model.parameter_name)torchtext,torchvision 等有一些常用数据集和处理函数,如 get_tokenizer,build_vocab_from_iterator计算过程中的 loss 可以用指数移动平…

你知道什么是生成对抗网络吗

生成对抗网络(GANs)是一种深度学习模型,已经显示出在许多生成相关任务中的卓越性能。最近几年,越来越多的研究人员将注意力集中于 GAN 的隐空间属性,并提出了许多利用这些属性进行语义图像编辑的方法。然而&#xff0c…

读取拉线位移传感器(RS485协议)的ROS驱动包

目录 一、Windows环境调试 1.1下载、安装UT-890A驱动 1.2接线 1.3官方上位机调试 二、ubuntu系统测试通讯 三、ROS程序包解析数据 3.1创建ROS工作空间和驱动包 3.2 C解析数据 3.3完整代码 软件环境:Windows 10 VMware 16 Ubuntu 20.04 Noetic 硬件包括&…

Dockerfile 部署 Java 服务

以下是一个示例的 Dockerfile 部署 Java 服务的步骤: # 基于 Java 镜像构建 FROM openjdk:8u212-jre#配置参数 ENV TZAsia/Shanghai ENV JAVA_OPTS"-Xms128m -Xmx256m -Djava.security.egdfile:/dev/./urandom -Duser.timezoneGMT8 -Dfile.encodingUTF-8 -Dsu…

webassembly输出独立文件

通用编译格式 emcc ... -o output.* 几种常用的输出格式 emcc ... -o output.html 输出html文件。为emscripten自动生成的页面内容,调用output.js作为启动文件,此外还会生成一个output.wasm文件。 emcc ... -o output.js 输出js文件。作为启动文件…

100天精通Golang(基础入门篇)——第11天:深入解析Go语言中的切片(Slice)及常用函数应用

🌷 博主 libin9iOak带您 Go to Golang Language.✨ 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《I…