let与var的区别

关于let和var的区别可能大家都知道了,主要有以下几点:

1、var没有块级作用域(但有函数作用域),而let有块级作用域。

2、var存在变量提升,而let没有变量提升。

3、var可以声明重名的变量,let不可以声明重名的变量。

for循环中的let声明

1、解决循环遍历渗透到外部的缺点

看下面两段代码:

        for(var i = 0; i < 5; i++){console.log('--------');}console.log(i);// 5

这段代码输出的i是5,原因是var声明的变量没有块级作用域。

        for(let i = 0; i < 5; i++){console.log('--------');}console.log(i); // ReferenceError: i is not defined

这段代码结果是ReferenceError,原因是let声明的变量有块级作用域。

说这一点的原因是,大家以后在用for循环时,尽量用let来声明循环变量,因为指不定以后写代码时一不小心就在两个循环中都用了var声明同一个变量,这样第二个for循环很可能就会受影响!

2、在每一次循环中let声明的变量都是不同的变量实例

2.1 var

看下面两段代码:

        for(var i = 0; i < 5; i++){console.log('---');setTimeout(() => console.log(i),0);}

大家猜这段代码结果是多少,你是不是以为是 0 1 2 3 4,但其实是5 5 5 5 5。

这是为什么呢?首先搞懂setTimeout。

这其实就是之前说过的JS事件循环,具体请看我的文章:JavaScript-事件循环

以为setTimeout是宏任务,它会等到所有同步任务执行完后再执行。举个例子大家就懂了:

        for(var i = 0; i < 5; i++){console.log('---');setTimeout(() => console.log(i),0);}for(var j = 0; j < 5; j++){console.log('000000');}

这两个for循环,输出结果是这样的:即所有同步代码执行完后再执行异步任务。

setTimeout(function,0)还有很多妙用,之后也会为大家带来这些小妙招。

说回来,最上面那个var的for循环执行过程就如下:

红宝石书上的解释:“在退出循环时,迭代变量保存的时导致循环退出的值:5。在之后执行超市逻辑时,所有的i都是同一个变量,因而输出的都是同一个最终值

setTimeout的代码是最后执行,然而在执行同步代码时,第一次循环给了第一个setTimeout的i为0,第二次循环给了i值为1,因为大家用的都是同一个1,所以第二次循环修改为1后,第一次循环给的那个异步任务的i值也会变为1(因为此时还没开始执行异步任务,所以修改是有效的)。

2.2 let

把上面那段代码换成let:

        for(let j = 0; j < 5; j++){console.log('---');setTimeout(() => console.log(j),0);}

这次输出就是0 1 2 3 4了:

为什么呢?

红宝石书上原话是:“在使用let声明迭代变量时,JavaScript引擎在后台为每个迭代循环声明一个新的迭代变量,每个setTimeout引用的都是不同的变量实例” 。

其实就是上面那幅图,每次给setTimeout的i值,前面都不会更新了,因为每次给的i值都是一个新的变量实例

注意:这种每次循环中声明一个独立变量的行为适用于所有for循环,包括for-in和for-of。

----------------------------------------------------------------------------------------

今天刚开始写读书笔记,以后会坚持写的,将一些我没经常用到的知识点记录一下。这本书真的很好,可以说让我注意到了许多平时没注意的细节,比如虽然以前知道var没有块级作用域,但我用for循环时还是用的var声明循环变量,以后就记得了,一定要用let,这样代码更严谨一点。

关于let你不知道的知识点——红宝石书笔记记录相关推荐

  1. 《Effective C++》第8章 定制new和delete-读书笔记

    章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effecti ...

  2. 3.14 我总结的一些小红书笔记发布频率技巧!【玩赚小红书】

    一.笔记审核机制 说到笔记曝光率自然离不开小红书的笔记审核机制.小红书整改之前的机制近乎于零,只要避免很多不合规的发布即可.但是,现在我们必须遵守和适应新的审核规则和机制,才有更多的笔记文章分享到达用 ...

  3. 小红书笔记如何发布内容

    很多人都在吐糟自己不能发送小红书的笔记本,但很多人对于小红书笔记发不了是为什么,还是找不到原因,其实原因有很多种,小编也不一一给大家介绍了,今天小编给大家演示下正确的小红书笔记发布流程,下面小编就给大 ...

  4. 涂书笔记-让读书笔记不再困难

    今天晴空万里,没有一丝云彩,阳光也暖暖的,照得人心头亮堂堂的.而我趁着五一这放假的时光,补充一下精神的食粮,倚靠在那略微倾斜的凳子上,阅读着我喜欢的书.看书看到宋真宗赵恒,想起他曾说"富家不 ...

  5. EssentialC++_chapter06 binary tree 的学习笔记记录及问题

    Essential C++ chapter06 binary tree 的学习笔记记录及问题 Author:Dargon Note date:2021/02/28 Source: <Essent ...

  6. 干货分享:高效办公工具【视频转文字、视频播放器、B站视频下载软件、贴图、截图提取文字并翻译、笔记记录软件、任务管理网站】

    高效办公工具分享--视频转文字.视频播放器.B站视频下载软件.贴图.截图提取文字并翻译.笔记记录软件.任务管理网站 一 前言 二.下载链接及效果 1.视频自动转文字-飞书妙记(目前免费使用!!) 2. ...

  7. Examination:《计算机系统与网络技术》计算机三级考试重点笔记记录

    Examination:<计算机系统与网络技术>计算机三级考试重点笔记记录 目录 1.十进制转2进制 一.选择题 2.网友总结 二.综合题 三.应用题 1.根据IP地址.子网掩码地址,求出 ...

  8. 【方向盘】达到Linux第三阶段的常用命令笔记记录---Part Ⅱ

    实现自己既定的目标,必须能耐得住寂寞单干 本文已被https://yourbatman.cn收录:女娲Knife-Initializr工程可公开访问啦:程序员专用网盘https://wangpan.y ...

  9. 小红书笔记打开显示连接不到服务器,小红书笔记看不到全文怎么回事啊?怎么发布小红书笔记?...

    我们可以通过小红书购物笔记了解一些商品哦,因为小红书购物笔记里面的内容基本都是一些买家的购物体验,对于要买东西的我们来说,可以提供一些建议.可是最近有网友咨询小红书笔记看不到全文,小红书购物笔记找不到 ...

最新文章

  1. bzoj 3028 生成函数
  2. hihoCoder 1578 Visiting Peking University 【贪心】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)...
  3. c语言用fun求矩阵,C语言通过函数调用求n*n阶矩阵周边元素绝对值之和
  4. yolov3 python_Python 3 Keras YOLO v3解析与实现
  5. 橙白oj18训练作业2-题解、代码
  6. golang string转int8_golang 中string和int类型相互转换
  7. 【数据结构与算法】二叉堆V2.0的Java实现
  8. 社群空间站v3.5.2 后台增加一处备注
  9. ssm如何支持热部署_IntelliJ IDEA基于SpringBoot如何搭建SSM开发环境
  10. 插入排序算法(insertion-sort)
  11. Application Wizard生成的项目文件简介
  12. 几种物流仿真软件的比较
  13. 论文阅读《Revisiting Domain Generalized Stereo Matching Networks from a Feature Consistency Perspective》
  14. MongoDB windows 局域网连接
  15. LBS服务LevelUp推二维码支付产品
  16. matlab生成曲线程序,Matlab绘制频散曲线程序代码(20210119130722).docx
  17. ubuntu vi 方向键乱
  18. 不知道有哪些可以语音转文字的软件?推荐你用这个
  19. Android 手机自动化测试工具有哪几种?
  20. 解决ChatGPT网络总是掉线问题

热门文章

  1. Tekla图纸二次开发课程
  2. Cloudflare发布全球最快的DNS
  3. 李宏毅《机器学习》误差
  4. 皓月酒店管理系统: Jquery + Servlet + Mybatis
  5. AP计算机从绝望到满分-----深圳中学张嘉轩如何说
  6. c++学习——(6)数组对象与对象成员
  7. 推流是什么,直播为什么要推流
  8. 2023真无线蓝牙耳机怎么选?值得入手的蓝牙耳机推荐
  9. 全球与中国医疗3D打印机市场深度研究分析报告
  10. unity urp 棉麻织物渲染