ES6 generator Symbol yield

Symbol  独一无二的值

const s1 = Symbol('a')const s2 = Symbol('a')console.log(s1 === s2) // falseconsole.log(typeof s1) // 'symbol'let o = {a: 90,}let symbol = Symbol()o[symbol] = 100console.log(o)//{a: 90, Symbol(): 100}

普通函数一旦执行 函数体从上往下依次执行

 function f() {console.log(1)//1console.log(2)//2console.log(3)//3}f()

生成器函数(generator)-生成迭代器(Iterator)的函数,配合yield关键字来控制代码执行流程

  function* go(str) {console.log(1)//1let a = yield strconsole.log(2)//2let b = yield aconsole.log(3)//3return b}const it = go('hehe')console.log(it)const r1 = it.next(1)console.log(r1)//{value:'hehe',done: false}const r2 = it.next(2)console.log(r2)//{value: 2, done: false}const r3 = it.next(3)console.log(r3)//{value: 3, done: true}function* test(num) {let x = 3 * (yield num + 1)let y = yield x / 3return x + y + num}let n = test(3)console.log(n.next()) // {value: 4, done: false}console.log(n.next(5)) // {value: 5, done: false}console.log(n.next(8)) // {value: 26, done: true}

自己模拟生成器函数

 function* buy(books) {for (let i = 0; i < books.length; i++) {yield books[i]}}const it = buy(['js', 'vue'])console.log(it.next()) //{value: 'js', done: false}console.log(it.next()) // { value: 'vue', done:true}console.log(it.next())//{value: undefined, done: true}

for-of遍历迭代器

  function* demo() {yield 1yield 2yield 3return 4}const it = demo()for (let k of it) {console.log(k)}

yield是ES6的新关键字,使生成器函数执行暂停,yield关键字后面的表达式的值返回给生成器的调用者。它可以被认为是一个基于生成器的版本的return关键字。
yield关键字实际返回一个IteratorResult(迭代器)对象,它有两个属性,value和done,分别代表返回值和是否完成。
yield无法单独工作,需要配合generator(生成器)的其他函数,如next,懒汉式操作,展现强大的主动控制特性。

  function* test() {yield 'a'yield 'b'}function* test1() {yield 'x'// yield* test()// for (let k of test()) {//   console.log(k)// }yield 'y'}for (let v of test1()) {console.log(v)}function* Person() {yield (this.name = 'zs')yield (this.age = 18)}let person = {}let obj = Person.bind(person)()console.log(obj.next())//{value: 'zs', done: false}console.log(obj.next())//{value: 18, done: false}console.log(person)//{name: 'zs', age: 18}


generator应用 

 const oImg = document.querySelector('img')let flag = true // 第一张 
function* change() {while (true) {yield (oImg.src = './images/2.jpg')yield (oImg.src = './images/1.jpg')}}const it = change()document.querySelector('.btn').addEventListener('click', function () {it.next()})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/192944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python高级数据结构——图论算法(Graph Algorithms)

Python中的图论算法&#xff08;Graph Algorithms&#xff09;&#xff1a;高级数据结构解析 图是一种由节点&#xff08;顶点&#xff09;和边组成的数据结构&#xff0c;用于表示不同元素之间的关系。图论算法旨在解决与图相关的问题&#xff0c;例如路径查找、最短路径、最…

零基础上手,秒识别检测,IDEA研究院发布全新T-Rex模型

目标检测作为当前计算机视觉落地的热点技术之一&#xff0c;已被广泛应用于自动驾驶、智慧园区、工业检测和卫星遥感等场景。开发者在研究相关目标检测技术时&#xff0c;通常需熟练掌握图像目标检测框架&#xff0c;如通用目标检测框架 YOLO 系列&#xff0c;旋转目标检测框架…

python-绘图(主次坐标轴)

-- coding: utf-8 -- “”" Spyder Editor This is a temporary script file. “”" import pandas as pd import numpy as np import matplotlib.pyplot as plt data1pd.ExcelFile(r"D:\ZXL工作文件\6.15\6.16汇报内容1.xlsx")raw_datapd.read_excel(d…

『Nginx安全访问控制』利用Nginx实现账号密码认证登录的最佳实践

&#x1f4e3;读完这篇文章里你能收获到 如何创建用户账号和密码文件&#xff0c;并生成加密密码配置Nginx的认证模块&#xff0c;实现基于账号密码的登录验证 文章目录 一、创建账号密码文件1. 安装htpasswd工具1.1 CentOS1.2 Ubuntu 二、配置Nginx三、重启Nginx 在Web应用程…

SpringAMQP入门案例——发送消息

依赖 <!--SpringAMQP起步依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> yml配置文件 自行修改 spring:rabbitmq:host: 192.168.220.130 # …

CyclicBarrier实战应用——批量数据多线程协调异步处理(子线程执行事务回滚)

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; CountDownLatch实战应用——批量数据多线程协调异步处理(子线程执行事务…

【源码篇】基于SpringBoot+thymeleaf实现的大学生自习室座位预定系统

文章目录 系统介绍管理员学生 技术选型成果展示账号地址及其他说明 系统介绍 基于SpringBootthymeleaf实现的大学生自习室座位预定系统是为座位管理打造的一款在线管理平台&#xff0c;它可以实时完成信息处理&#xff0c;使其系统化和规范化。 系统功能说明 管理员 1、用户…

误用STM32串口发送标志位 “USART_FLAG_TXE” “USART_FLAG_TC”造成的BUG

当你使用串口发送数据时是否出现过这样的情况&#xff1a; 1.发送时第一个字节丢失。 2.发送时出现莫名的字节丢失。 3.各种情况字节丢失。 1.先了解一下串口发送的流程图&#xff08;手动描绘&#xff09;&#xff1a; 可以假想USART_FLAG_TXE是用于检测"弹仓"&…

【Rust日报】2023-11-30 Rust 异步编程中的困境:针对固定问题的探讨

Rust 临时生存期和super let 这篇文章讨论了 Rust 语言中临时变量的生存期问题以及一个新的语言想法——super let。作者首先介绍了临时变量的生存期规则&#xff0c;并探讨了临时生存期扩展的几种应用场景。然后&#xff0c;作者提出了super let的概念&#xff0c;旨在提供更多…

【STM32F103】GPIO通用输入输出口

GPIO 简介 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口是微控制器&#xff08;MCU&#xff09;必备的片上外设&#xff0c;可以实现微控制器与外部设备的数字交换。 STM32F103系列的芯片最多可以提供112个多功能双向IO引脚&#xff0c;但是显然…

架构师要懂的:一个新系统的服务器配置怎么计算,要多少资源

一. 私有云、公有云、混合云的区别 回答&#xff1a; 1.价格更贵 2.在企业内部使用 3.个性化定制&#xff0c;将IT硬件资源通过虚拟化的形式提供给企业内使用 私有云指由企业或组织自行搭建的云平台&#xff0c;只对内部人员可用&#xff0c;数据和应用程序都在企业或组织内…

机器学习-回归问题(Regression)

前言 与KNN分类任务预测的输出为离散型不同. 在机器学习中&#xff0c;回归任务是用于预测连续数值型变量的任务。回归任务在很多领域都有着广泛的应用. 回归问题求解 在一个回归问题中&#xff0c;很显然模型选择和好坏会直接关系到将来预测结果的接近程度&#xff0c;举个…

规则引擎专题---2、开源规则引擎对比

开源规则引擎 开源的规则引擎整体分为下面几类&#xff1a; 通过界面配置的成熟规则引擎&#xff0c;这种规则引擎相对来说就比较重&#xff0c;但功能全&#xff0c;比较出名的有:drools, urule。 基于jvm脚本语言&#xff0c;互联网公司会觉得drools太重了&#xff0c;然后…

常见的AI安全风险(数据投毒、后门攻击、对抗样本攻击、模型窃取攻击等)

文章目录 数据投毒&#xff08;Data Poisoning&#xff09;后门攻击&#xff08;Backdoor Attacks&#xff09;对抗样本攻击&#xff08;Adversarial Examples&#xff09;模型窃取攻击&#xff08;Model Extraction Attacks&#xff09;参考资料 数据投毒&#xff08;Data Poi…

GEE:不同方向的线性检测算子

作者:CSDN @ _养乐多_ 本文将介绍在 Google Earth Engine(GEE)平台上,使用不同方向的线性检测算子进行卷积操作的代码框架、核心函数和多种卷积核,比如 E-W、NE-SW、N-S、NW-SE 方向检测算子等。 结果如下图所示, 文章目录 一、定向检测算子二、完整代码三、代码链接一…

ubuntu上创建服务启动python脚本

场景 最近在使用ubuntu服务器部署MySQL和同步数据&#xff0c;同步数据使用的是python&#xff0c;但是我不能直接操作服务器&#xff0c;只能通过Xshell远程访问服务器&#xff0c;但是启动python脚本的时候如果关掉xshell会停止Python脚本&#xff0c;所以如果要让python脚本…

伪类,伪元素有什么,区别是什么

在CSS中&#xff0c;伪类&#xff08;pseudo-classes&#xff09;和伪元素&#xff08;pseudo-elements&#xff09;是用来选择文档中不同状态或特定部分的技术。它们的作用是为了能够更精确地选择文档中的某些部分&#xff0c;以便对其应用样式或效果。 伪类&#xff08;pseu…

JAVA代码优化:CommandLineRunner(项目启动之前,预先加载数据)

CommandLineRunner接口是Spring Boot框架中的一个接口&#xff0c;用于在应用程序启动后执行一些特定的代码逻辑。它是一个函数式接口&#xff0c;只包含一个run方法&#xff0c;该方法在应用程序启动后被自动调用。可以帮助我们在应用程序启动后自动执行一些代码逻辑&#xff…

php获取过去一段的时间范围

在 PHP 中获取过去一周的时间&#xff0c;你可以使用 DateTime 和 DateInterval 类。这里是一个示例代码&#xff0c;展示如何获取从今天起算的过去一周&#xff08;7天&#xff09;的日期&#xff1a; // 当前日期 $today new DateTime();// 设置日期为一周前 $oneWeekAgo …

Java(十)(网络编程,UDP,TCP)

目录 网络编程 两种软件架构 网络通信的三要素 IP IPv4的地址分类 特殊IP 端口号 协议 用UDP协议发送数据 用UDP接收数据 TCP接收和发送数据 TCP通信--支持与多个客户端同时通信 网络编程 可以让设备中的程序与网络上其他设备的程序进行数据交互(实现网络通信) 两…