首页 > 其他分享 >let 声明的变量,只在代码块内有效

let 声明的变量,只在代码块内有效

时间:2024-07-07 14:43:11浏览次数:13  
标签:10 console 变量 代码 循环 let var

{
  let a = 10;
  var b = 1;      
}
a // ReferenceError: a is not defined
b // 1

for 循环的计数器,就很适合使用 let 命令。

for (let i = 0; i < 10; i++) {

  // ...

}

console.log(i); // ReferenceError: i is not defined

上面代码中,计数器 i 只在 for 循环体内有效,在循环体外引用就会报错。

下面的代码如果使用 var,最后输出的是 10。

var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10

上面代码中,变量ivar命令声明的,在全局范围内都有效,所以全局只有一个变量i。每一次循环,变量i的值都会发生改变,而循环内被赋给数组a的函数内部的console.log(i),里面的i指向的就是全局的i。也就是说,所有数组a的成员里面的i,指向的都是同一个i,导致运行时输出的是最后一轮的i的值,也就是 10。

如果使用let,声明的变量仅在块级作用域内有效,最后输出的是 6。

var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6

上面代码中,变量ilet声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是6。你可能会问,如果每一轮循环的变量i都是重新声明的,那它怎么知道上一轮循环的值,从而计算出本轮循环的值?这是因为 JavaScript 引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算。

另外,for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。

for (let i = 0; i < 3; i++) {
  let i = 'abc';
  console.log(i);
}
// abc
// abc
// abc

 

标签:10,console,变量,代码,循环,let,var
From: https://www.cnblogs.com/ladybug7/p/18288479

相关文章

  • 代码的坏味道——长参数
        前言:一个函数的参数越少越好,并不是参数少或不传更优雅,而是有其他方案来优化长参数。一个函数的参数尽量不要超过3个,如果超过了这个限制,那么代码的坏味道就产生了。一、整合参数如果参数很多,那么第一就要考虑,这些参数是否存在关联?若存在是否可以归为一组?badCase:......
  • 微信小程序-首页制作 - (图解+代码流程)
    目录首页制作效果图一、轮播图的制作1.首页轮播图.wxml代码2.swiper和swiper-item组件二、滑动视图效果图1.首页滑动视图.wxml代码scroll-view组件2.首页滑动视图.wxss代码white-space:nowrap;三、标题和学员作品图片布局效果图1.标题和作品图片.wxml代......
  • 条件变量condition_variable用法学习
    转自:https://www.cnblogs.com/fenghualong/p/13855360.html1.介绍 condition_variable类似于信号量机制,实现了线程的等待和唤醒。wait() :阻塞等待的同时释放锁(原子操作),还可以添加阻塞判断函数,详见代码notify_all() :唤醒所有阻塞等待的线程notify_one():唤醒某一个等......
  • 使用zdppy_api+onlyoffice word文档在线共同编辑,附完整的vue3前端代码和python后端代
    参考文档:https://api.onlyoffice.com/zh/editors/basichttps://api.onlyoffice.com/zh/editors/coedit基本的架构思考:文档表:记录的是文档信息key:这个key可以标识唯一的一个文档,可以是文档的hash值fileType:文档的类型,docx,txt,pdf,其他title:文档的标题,也就是文档的实际......
  • 轻松解决win7和win10共享打印机出现错误代码0x00000709的办法
    轻松解决win7系统共享打印机错误代码0x00000709的办法轻松解决win10系统共享打印机错误代码0x00000709的办法为了方便用户更方便充分的利用打印机,配置打印机共享功能,开启共享后可以查询到共享的打印机,但是点击选择连接时出现错误代码0x00000709,尝试了各种方法修改注册表等还......
  • 《已解决》无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
    原因:Python环境未正确配置:可能你没有将Python添加到系统的环境变量中。你需要手动将Python的安装目录(以及包含 pip.exe 的文件夹)添加到系统的环境变量 PATH 中。 解决:1.找到python的安装目录键盘按下  win键+R键,输入cmd回车。随后输入wherepythonwhere......
  • Java毕设项目汇总 - 1 - springboot框架+vue+源代码+论文等完整资料
    逃逸的卡路里博主介绍:✌️码农一枚|毕设布道师,专注于大学生项目实战开发、讲解和毕业......
  • 变量
    int变量意义:在内存中占四个字节的大小每个(不同编译器可能不同)存储的范围是2的31次方之所以不是32次是因为int类有一个符号位;char(1字节)通常来存储字符实际上存的还是数字呈现出来的是ASCII码对应的字符如:chara=65;std::cout<<a<<std::endl;short(2字节)long(4字......
  • stm32串口 环形缓冲区 代码
    voidHAL_UART_RxCpltCallback(UART_HandleTypeDef*huart){ //printf("ITIN\r\n");// printf("%d\r\n",HAL_GetTick()); //置零设定电流值PID时间if(huart->Instance==USART3){ //将数据放入缓冲区 circular_buffer.buffe......
  • 重识Java中的代码块
    目录一、基本介绍二、基本语法三、代码块的好处3.1普通代码块 3.2静态代码块四、代码块调用顺序 一、基本介绍代码块又称为初始化块,属于类的成员,类似于方法,将逻辑语句封装在方法体中,通过{}包围起来。但是与类不同的是,它没有方法名,没有返回,没有参数,只有方法体,......