整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

JavaScript里的循环方法

JavaScript里的循环方法

我们开始使用内置的forEach方法

myArray.forEach(function (value) {

写法简单了许多,但也有短处:你不能中断循环(使用break语句或使用return语句。)

还有一种for-of循环

它的for-of的语法:

for-of循环使用例子:

循环一个字符串:

循环一个Map:

循环一个数组(Array);

我们可以使用const来替代let,这样它就变成了在循环里的不可修改的静态变量。

循环一个拥有enumerable属性的对象:

for–of循环并不能直接使用在普通的对象上,但如果我们按对象所拥有的属性进行循环,可使用内置的Object.keys()方法:

切版 qieban(.cn)

编写程序时,我们经常需要重复执行某些操作,这时候循环结构就显得非常有用。JavaScript 提供了多种循环结构,以适应不同的编程场景。以下是 JavaScript 中常见的循环结构:

for 循环

for 循环是最常见的循环结构之一,它允许我们指定循环开始前的初始化代码、循环继续的条件以及每次循环结束时要执行的代码。

基本语法

for (初始化表达式; 循环条件; 循环后的操作表达式) {
    // 循环体代码
}

示例:输出 1 到 10 的数字

for (var i=1; i <=10; i++) {
    console.log(i);
}

while 循环

while 循环在给定条件为真时将不断循环执行代码块。与 for 循环不同,while 循环只有循环条件,没有初始化和迭代表达式。

基本语法

while (条件) {
    // 循环体代码
}

示例:使用 while 循环输出 1 到 10 的数字

var i=1;
while (i <=10) {
    console.log(i);
    i++;
}

do...while 循环

do...while 循环和 while 循环类似,但它至少会执行一次循环体,无论条件是否为真。

基本语法

do {
    // 循环体代码
} while (条件);

示例:使用 do...while 循环输出 1 到 10 的数字

var i=1;
do {
    console.log(i);
    i++;
} while (i <=10);

for...in 循环

for...in 循环用于遍历对象的属性。

基本语法

for (var key in 对象) {
    // 使用 key 访问对象属性
}

示例:遍历对象的属性

var person={
    name: "张三",
    age: 30,
    job: "软件工程师"
};

for (var key in person) {
    console.log(key + ": " + person[key]);
}

for...of 循环

for...of 循环用于遍历可迭代对象(如数组、字符串等)的元素。

基本语法

for (var item of 可迭代对象) {
    // 使用 item 访问元素
}

示例:遍历数组的元素

var fruits=["苹果", "香蕉", "橘子"];
for (var fruit of fruits) {
    console.log(fruit);
}

总结

JavaScript 的循环结构为我们提供了强大的工具来处理重复任务。for 循环适合于当我们知道循环次数时使用;while 和 do...while 循环适合于循环次数未知,但是循环条件明确的情况;for...in 和 for...of 循环则让对象和数组的遍历变得更加简洁。掌握这些循环结构有助于我们编写更加高效和可读性更强的代码。

s是单线程的语言,单线程是指所有的程序路径按照一定的顺序执行,只有前面的程序执行了,后面的程序才会执行。

也就是说在同一时间,js只能做一件事情,为了协调浏览器产生的各种事件、网络处理、前端渲染等行为,js的事件循环机制,即EventLoop应运而生。

JavaScript是单线程的原因

js的设计初衷是作为浏览器的脚本语言,浏览器中涉及到与用户互动、频繁操作DOM等动作,如果js设计为多线程,会有很复杂的线程同步问题,即使同步问题被解决,也会降低浏览器的响应效率,得不偿失,因此,JavaScript被设计为单线程保证浏览器动作的一致性。

事件循环(EventLoop)

JavaScript既然被设计为单线程,是如何做到异步的呢?这时就用到了JavaScript的事件循环机制。

如下图所示为JavaScript事件循环的原理图。

如图所示,事件循环是主线程循环读取任务队列中的任务,直到所有的任务都被执行。在事件循环中,JavaScript用到了栈、堆以及队列等数据结构。

栈中存放的是执行上下文,有函数被调用时,就会创建上下文存放在执行栈中。

堆中表示一个非结构化的内存区域,用来存放对象。队列是指任务队列,用于存放异步任务。

js引擎遇到一个异步事件之后不会一直等待事件的返回结果,而是将事件挂起,继续执行执行栈中的其他任务。

当异步事件返回结果时,js将异步事件callback函数放入队列中,被放入队列中的异步事件不会立即回调,等到当前执行栈中的任务都执行完成,处于闲置状态的主线程按照队列顺序将处于首位事件的callback函数放入执行栈中,执行该函数的同步代码,如果遇到了异步事件,同样也会将其回调函数放入事件队列中......

如此反复,就形成了一个无限循环,这也是被称为“事件循环(EventLoop)”的原因。

宏任务(Micro task)和微任务(Macro task)

js事件循环的基本原理已经描述清楚,但是异步任务之间也有所不同。

上面讲到,js在执行异步任务时,回调函数会被放在js的任务队列中,实际上,回调函数的类别不同,执行的优先级也不同。

不同的优先级被分为两类,一类是宏任务(Micro task),一类是微任务(Macro task)。

回调函数是微任务时,会被放在微任务队列,回调函数是宏任务时,会被放在宏任务队列。微任务的优先级高于宏任务,当主线程的任务执行完成时,会首先去执行微任务队列中首位的回调函数,当微任务队列中为空时,才回去执行宏任务队列中的回调函数。

常见的微任务有:promise,常见的宏任务有setInterval等。

因此,事件循环的执行流程图如下所示:

最后:

1)关注+私信回复:“测试”,可以免费领取一份10G软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Mysql数据库、抓包工具、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试等。

2)关注+私信回复:"入群" 就可以邀请你进入软件测试群学习交流~~