for循环当中的 var let区别
2024-09-08 19:35:22
首先要了解这里代码执行顺序:
for循环同步;setTimeout异步;
js在执行代码的过程中,碰到同步代码会依次执行,碰到异步代码就会将其放入任务队列中进行等待,当同步代码执行完毕后再开始执行异步代码;
然后看下面:
let声明 for(let i=1; i<=5; i++){
setTimeout(function(){console.log(i)})
}
// 1 2 3 4 5
let 是块级作用域,一个{} 就是一个区块,而且在每一块内部都不能有重复声明的变量
上面这个循环遍历执行了5次,相当于有五个块作用域,每个块作用域里面的都定义了一个叫 i 的变量。值分别是1 2 3 4 5
所以最后执行setTimeout的时候会从当前作用域(块作用域)内寻找变量 i ,所以最终结果是1 2 3 4 5
var声明 for(var i=1; i<=5; i++){
setTimeout(function(){console.log(i)})
}
// 6 6 6 6 6
var是函数作用域可以重复声明并覆盖值,在当前这个作用域下,变量 i 在循环结束后值更新为6,再执行setTimeout时,setTimeout所在的作用域里 i 已经是6了。
搜索
复制
最新文章
- window.onload 和 DOMContentLoaded区别及如何判断dom是否加载完毕
- Ring0打开其他设备对象三种方式整理
- Java学习笔记 07 接口、继承与多态
- 利用FFmpeg生成视频的缩略视频 v8.3
- 图解Android - System Service 概论 和 Android GUI 系统
- Rest风格WEB服务(Rest Style Web Service)的真相
- 乐在其中设计模式(C#) - 单例模式(Singleton Pattern)【转】
- 分布式缓存BeIT Memcached简介
- SQL Server 2008 Values 新用途
- string.Format字符串格式说明
- epoll 中EPOLLIN 和 EPOLLOUT
- JDK PATH 和 CLASSPATH环境变量的作用及其配置
- Ajax应用常见的HTTP ContentType设置
- ubuntu 下安装sublime
- excel转html 实现在线预览
- 校验ISBN的方法
- H5动画
- Oracle EBS各个模块日志收集的方法
- Python之shutil模块(复制移动文件)
- ubuntu开机自动启动服务
热门文章
- java的饿汉和懒汉设计模式
- 数值分析——插值(一)、Runge现象
- [python] 基于wordcloud库绘制词云图
- [OpenCV实战]43 使用OpenCV进行背景分割
- Asp-Net-Core-搭建ELK日志平台-Docker-Compose版本
- DML_添加数据-DML_删除数据
- Node.js+Koa2+TypeScript技术概览
- 同类型芯片资源对比-CH32x芯片快速应用说明
- 快速上手python的简单web框架flask
- 文盘Rust -- rust 连接云上数仓 starwift