GDPU Vue前端框架开发 ecmascript6初步使用

news2024/10/10 22:28:15

前端框架基础,打造你的前端应用。

箭头函数 

使用箭头函数实现求多个数的和,可以有一个参数,也可以有多个或零个参数。

let sum = (...numbers) => {
    return numbers.reduce((acc, curr) => acc + curr, 0);
  };

let a=sum();
let b=sum(1);
let c=sum(1,2);
let d=sum(1,2,3,4,5);
let arr=[1,2,3,4,5,6];
let e=sum(...arr)
console.log(a, b, c, d, e)

// let sum=(...data)=>{
//     s=0;
//     for(let i=0;i<data.length;i++){
//         s=s+data[i];
//     }
//     return s;
// }

可以安装nodejs与vscode的coderunner插件在vscode运行调试。

 这里用了箭头函数的嵌套,其中(...参数)是一个rest参数,接着里面调用了reduce方法,回调函数是第一个参数,然后初始值0是第二个参数,注意看清楚逗号在哪,在js中经常有回调函数或箭头函数当参数的。

📚使用箭头函数要注意格式是:函数名=>函数的返回值。

📕如果没有参数就是()=》{},箭头函数不要再写return了,直接写值。然后一个参数名可以简写成参数=》{},两个或以上的则为一般形式(a,b,c,...)=>{}。

异步promise对象

红灯3秒亮一次,绿灯1秒亮一次,黄灯2秒亮一次;如何使用Promise让三个灯不断交替重复亮灯?,亮灯函数可以参考已经给出的或自行定义。

function red() {
    console.log('red');
}
function green() {
    console.log('green');
}
function yellow() {
    console.log('yellow');
}
const run = (color, interval) => {
    return new Promise((resolve) => {
        setTimeout(() => {
            color();
            resolve();//使得 .then() 链中的下一个 Promise 被执行
        }, interval)
    })
}
//使用链式调用,依次的red,green,yellow,然后循环
const loop = () => {
    Promise.resolve().then(() => {
        return run(red, 3000);
    }).then(() => {
        return run(green, 1000);
    }).then(() => {
        return run(yellow, 2000);
    }).then(() => {
        loop()//递归调用
    })
}
loop()

这里使用了链式调用,首先在run的创建promise里调用了resolve的,链式调用中从Promise.resolve().开始,确保 Promise 链的启动和顺序执行。然后每到一个then后面执行的run方法都会去执行resolve更换状态,即当前promise完成后才会进行.then进行下一个promise的执行,这里要理清楚。然后用了几个箭头函数嵌套,要注意看准符号进行拆分就好看懂了,根据题意,要实现异步,肯定得创建promise对象,然后传几个参数,有颜色也有时间间隔,接着看返回值,最后返回调用的肯定是计时器与具体的实现。

📚promise这里也有个常用的模板。new Promise((resolve,reject) => {}),resolve为成功状态的调用函数对应的具体实现为.then,reject为出现异常时的调用函数对应的具体实现为.catch。这个在前端中的使用还是比较重要的,在vue中后面的axios跨域也会用到。

然后,链式调用或许有点繁琐,也可以用es6中常用的异步方式async与await,当async函数内遇到await就会进行等待去处理await后跟的promise,没有加await直接执行。

function red() {
    console.log('red');
}

function green() {
    console.log('green');
}

function yellow() {
    console.log('yellow');
}

// 创建一个延迟函数
function delay(interval) {
    return new Promise(resolve => setTimeout(resolve, interval));
}

// 交替亮灯的函数
async function loop() {
    while (true) {
        red();
        await delay(3000); // 红灯亮3秒

        green();
        await delay(1000); // 绿灯亮1秒

        yellow();
        await delay(2000); // 黄灯亮2秒
    }
}

// 启动交通灯
loop();

可以看到,await里面执行的也是promise,因此要等前面的灯亮了才会执行后面的灯。

 

题变一下,js中如何实现程序并发执行,即如何实现3个灯各自同时并发执行?

const red = () => {
    console.log('red');
};

const green = () => {
    console.log('green');
};

const yellow = () => {
    console.log('yellow');
};

// 用于控制灯光的显示
const run = (color, interval) => {
    return new Promise((resolve) => {
        setInterval(() => {
            color(); // 每次调用灯光函数
        }, interval);
    });
};

const loop = () => {
    Promise.all([
        run(red, 3000),   // 红灯每3秒亮一次
        run(green, 1000), // 绿灯每1秒亮一次
        run(yellow, 2000) // 黄灯每2秒亮一次
    ]);
};

loop();

把setTimeout改为setInterval,然后用Promise.all,进行全部的promise对象执行完,然后每个对象通过setInterval作间隔。

function red() {
    console.log('red');
}
function green() {
    console.log('green');
}
function yellow() {
    console.log('yellow');
}
//定义一个异步函数来实现灯的调度
//这里只是每个颜色函数单独调用
async function asynf_run(color, interval) {
    return await new Promise((resolve, reject) => {
        setTimeout(() => {
            color();
            // console.log(new Date().toLocaleTimeString());//为了比对的方便,加入时间显示
            asynf_run(color, interval);//重新执行函数,以达到循环的目的
        }, interval);
    })
}
//定义一个异步的函数,来执行并行的目的。
const parrallel = async () => {   
    asynf_run(red, 3000)
    asynf_run(green, 1000)
    asynf_run(yellow, 2000)

}
//主程序调用
parrallel();

也可以在async函数中不加入await则会执行并行操作,然后每个颜色相对应的promise对象是加了await异步的。

可以看到三个灯各自同时并发执行,间隔少的会打印多一点。

有小白可能觉得这个很难繁琐,那阁下要是按最简单的方法怎么做这道题,不用promise就得嵌套好几个setTimeout或setInterval了,写一下就会发现好像更繁琐难看懂,所以学一些新的框架语法对开发还是有用的。

Promise与async/await的区别

Promise: 返回一个 Promise 对象,使用.then() 和 .catch()方法来处理成功和失败的结果在多个嵌套的异步操作中,可能导致多个回调或难以阅读的链式调用。

async/await: 总是返回一个 Promise,即使它返回的是一个非 Promise 值。提高了代码的可读性,更接近于同步代码的风格,易于理解和维护。

箭头函数的this

📕箭头函数中this指向的规则是什么?

箭头函数中的this指向根据当前执行上下文的变化而变化,遵循谁调用就指向谁。没找到直接调用者,则this指的是全局对象window。在严格模式下,没有直接调用者的函数中的this是undefind。使用call,apply,bind绑定,this指的是绑定的对象。嵌套函数中的this不会继承外层函数的this值。

下面代码输出结果分别是什么?为什么?

student1 = {
    name: '张三',
    outerName(){
    displayName=function(){
        console.log('student1: '+this.name)
    };
    displayName();
    }
}
student1.outerName();
student2 = {
    name: '张三',
    outerName(){
    displayName= () => {
        console.log('student2: '+this.name)
    }
    displayName();
    }

}
student2.outerName();

分别是  student1: undefined 、 student2: 张三。

当student1.outerName() 被调用时,在 outerName 方法内部,displayName 被声明为一个普通函数。当 displayName() 被调用时,this 的值在这个上下文中是全局对象(在浏览器中是 window,在 Node.js 中是 global),而不是 student1。所以,this.name 是 undefined(除非在全局作用域中有一个 name 属性)。student2.outerName() 被调用。当student2.outerName() 被调用时,displayName 被声明为一个箭头函数。箭头函数不绑定自己的 this,它会捕获外部上下文中的 this 值。在这种情况下,this 指向的是 student2 对象。因为普通函数的 this 绑定与箭头函数的 this 绑定行为不同。

实验心得

谁来异步写个作业吧。 

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

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

相关文章

实战千问2大模型第五天——VLLM 运行 Qwen2-VL-7B(多模态)

一、简介 VLLM 是一种高效的深度学习推理库&#xff0c;通过PagedAttention算法有效管理大语言模型的注意力内存&#xff0c;其特点包括24倍的吞吐提升和3.5倍的TGI性能&#xff0c;无需修改模型结构&#xff0c;专门设计用于加速大规模语言模型&#xff08;LLM&#xff09;的…

生成对抗网络(GAN,Generative Adversarial Network)

生成对抗网络&#xff08;GAN&#xff0c;Generative Adversarial Network&#xff09;是一种深度学习模型&#xff0c;由两部分组成&#xff1a;生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;。生成器的目标是生成逼真的样本&#x…

Xinstall品牌揭秘:如何成为App拉新的行业翘楚?

在移动互联网时代&#xff0c;App作为连接用户与服务的桥梁&#xff0c;其重要性不言而喻。然而&#xff0c;随着市场竞争的加剧&#xff0c;App拉新&#xff08;即吸引新用户下载并使用App&#xff09;的难度也在逐渐增大。传统的营销方式往往面临着成本高、效率低、用户留存差…

理解PID(零)——什么是PID

PID控制器是一种广泛用于各种工业控制场合的控制器&#xff0c;它结构简单&#xff0c;可以根据工程经验整定参数Kp,Ki,Kd. 虽然现在控制专家提出了很多智能的控制算法&#xff0c;比如神经网络&#xff0c;模糊控制等&#xff0c;但是PID仍然被广泛使用。常见的PID控制器有位置…

视频怎么转gif动图?5个简单转换方法快来学(详细教程)

相信大家在社交平台上会经常看到一些有趣的gif动图表情包&#xff0c;有些小伙伴就会问&#xff1a;这些GIF动图是如何制作的呢&#xff1f;一般GIF动图表情包可以用视频来制作&#xff0c;今天小编就来给大家分享几个视频转成GIF动图的方法&#xff0c;相信通过以下的几个方法…

文献阅读CONCH模型--相关知识点罗列

文章链接&#xff1a;A visual-language foundation model for computational pathology | Nature MedicineThe accelerated adoption of digital pathology and advances in deep learning have enabled the development of robust models for various pathology tasks across…

【可答疑】基于51单片机的智能家居系统(含仿真、代码、报告、演示视频等)

✨哈喽大家好&#xff0c;这里是每天一杯冰美式oh&#xff0c;985电子本硕&#xff0c;大厂嵌入式在职0.3年&#xff0c;业余时间做做单片机小项目&#xff0c;有需要也可以提供就业指导&#xff08;免费&#xff09;~ &#x1f431;‍&#x1f409;这是51单片机毕业设计100篇…

ceph基础

ceph基础搭建 存储基础 传统的存储类型&#xff1a; DAS设备&#xff1a; SAS,SATA,SCSI,IDW,USB 无论是那种接口&#xff0c;都是存储设备驱动下的磁盘设备&#xff0c;而磁盘设备其实就是一种存储是直接接入到主板总线上去的。直连存储。 NAS设备: NFS CIFS FTP 几乎所有的…

商标恶意维权形式及应对策略

在商业领域&#xff0c;商标恶意维权的现象时有出现&#xff0c;给正常的市场秩序和企业经营带来了不良影响。以下将介绍其常见形式及应对方法。 一、商标恶意维权的形式1、囤积商标后恶意诉讼。一些人或企业大量注册与知名品牌相似或具有一定通用性的商标&#xff0c;并非用于…

留学生毕业论文设计问卷questionnaire的基本步骤

在上一期内容中&#xff0c;小编介绍了留学毕业论文的定量研究和相关的问卷设计。然而在一些研究中&#xff0c;定量研究和问卷数据并不能满足我们的研究需求。这种情况下&#xff0c;我们可以采取其他的数据收集方式&#xff0c;例如observation&#xff0c;case study和inter…

软件设计之SSM(11)

软件设计之SSM(11) 路线图推荐&#xff1a; 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷新版SSM框架全套视频教程&#xff0c;Spring6SpringBoot3最新SSM企业级开发 资料可以去尚硅谷官网免费领取 学习内容&#xff1a; Springboot 配置文件整合SpringMVC整合Dr…

【学术会议征稿】第十届能源资源与环境工程研究进展国际学术会议(ICAESEE 2024)

第十届能源资源与环境工程研究进展国际学术会议&#xff08;ICAESEE 2024&#xff09; 2024 10th International Conference on Advances in Energy Resources and Environment 第十届能源资源与环境工程研究进展国际学术会议&#xff08;ICAESEE 2024&#xff09;定于2024年…

拓扑排序与入度为0的结点算法解析及实现

拓扑排序与入度为0的结点算法解析及实现 算法思想时间复杂度分析伪代码C语言实现环路检测结论拓扑排序是一种用于有向无环图(DAG, Directed Acyclic Graph)的重要操作,它可以对图中的结点进行排序,使得对于每一条有向边 (u, v),顶点 u 在排序中都出现在顶点 v 之前。本文介…

Qt和c++面试集合

目录 Qt面试 什么是信号&#xff08;Signal&#xff09;和槽&#xff08;Slot&#xff09;&#xff1f; 什么是Meta-Object系统&#xff1f; 什么是Qt的MVC模式&#xff1f; 1. QT中connect函数的第五个参数是什么&#xff1f;有什么作用&#xff1f; 3. 在QT中&#xff…

ROS2官方文档(2024-10-10最新版)

ROS 2 Documentation — ROS 2 Documentation: Jazzy documentation (armfun.cn) ROS 2 文档 — ROS 2 文档&#xff1a;Humble 文档 (armfun.cn) 翻译中文方法&#xff1a;使用windows11自带Edge浏览器打开&#xff0c;右上角点击翻译为中文

pytest框架之fixture测试夹具详解

前言 大家下午好呀&#xff0c;今天呢来和大家唠唠pytest中的fixtures夹具的详解&#xff0c;废话就不多说了咱们直接进入主题哈。 一、fixture的优势 ​ pytest框架的fixture测试夹具就相当于unittest框架的setup、teardown&#xff0c;但相对之下它的功能更加强大和灵活。 …

DBMS-3.3 SQL(3)——DML的INSERT、UPDATE、DELETE空值的处理DCL

本文章的素材与知识来自李国良老师和王珊老师。 DML——INSERT、UPDATE、DELETE 一. INSERT 1.语法 &#xff08;1&#xff09;INTO子句 &#xff08;2&#xff09;VALUES子句 &#xff08;3&#xff09;示例 2.插入子查询 若插入的是子查询则不需要VALUES子句 二. UPDATE …

大数据法律监督模型平台实现常态化法律监督

大数据法律监督模型平台充分挖掘大数据价值&#xff0c;利用大数据关联、碰撞、比对&#xff0c;从海量数据中自动筛查出法律监督线索&#xff0c;推送给检察官&#xff0c;有利于提升法律监督质效。 大数据法律监督模型平台建设目标 1、提升监察机关主动监督、精准…

基于DCGM+Prometheus+Grafana的GPU监控方案

目录 前言一、指标导出器1、DCGM&#xff1a;获取远程节点的信息 2、 DCGM-Exporter收集多节点信息更改收集指标 二、 Prometheus - From metrics to insight修改配置文件查看收集结果 三、Grafana仪表板展示导入数据源创建仪表板更多仪表板 前言 基于DCGM&#xff08;NVIDIA …

[SAP ABAP] LIKE TABLE OF

LIKE TABLE OF语句是用来参照结构体(工作区)对象定义内表数据类型的语句 在SAP ABAP中有标准表&#xff0c;排序表和哈希表三种内表数据类型 *定义标准表 DATA: <ty_tab_standard_name> LIKE [STANDARD] TABLE OF <dtype> [WITH NON-UNIQUE KEY <k1 k2 ... kn…