ES6之块级绑定

ES6之块级绑定

为什么会出现块级绑定的概念,这是一个历史遗留问题。 在ES6还没出现之前,如果我们使用var来定义变量,变量会进行提升,同时还可以重复声明变量。

js 复制代码
if(Math.random()>0.5){
    var a=1;
    console.log(a)
}else{
    console.log(a)
}

这里打印 a 不会报错,实际上它会提升一个变量 a,类似于var a。 而在ES6中,官方定义了一种新的模式let和const。

let

简单说,官方为了解决这些问题,首先定义了一种新的作用域,它使用{}来划分。叫做块级作用域。在块级作用域中声明的变量只存在于作用域中,并且不允许重复声明和变量提升。上面的代码在没有声明前使用就会报错。

不过实际上变量保留了提升的含义,只是提升到了暂时性死区。使用暂时性死区的变量会报错,只有声明之后才从暂时性死区取出。

还有一个循环中原来会出现的错误。例如:

js 复制代码
for (var i = 0; i < 5; i++) {
     (function (i) {
        setTimeout(() => {
             console.log(i);
         }, 1000);
     })(i);
 } 

在新的模式中,只要将var改为let,就不需要再写一个立即执行函数。

js 复制代码
for(let i=0;i<5:i++){
    setTimeout(()=>{
        console.log(i)
    },1000)
}

原因就在于在循环时,每一次循环都会创建一个新的作用域,同时循环变量还会绑定到作用域,使得每一次循环都会有一个新的循环变量。循环结束后循环变量被销毁。

const

const只能在第一次声明时赋值,之后再进行赋值会出现报错。

const的出现是为了弥补在程序中可能出现的重复赋值造成的错误。在平时,我们会先使用const进行声明,如果遇到需要重新赋值的情况,我们再把它改为let。

同时,const还用于那些不能更改的常量,例如:圆周率,屏幕尺寸等。 注意在for循环中如果有i++的条件出现,则必须使用let定义循环变量,在forin循环中可以使用const定义循环变量。

相关推荐
软件技术NINI几秒前
基于PHP和MySQL的快递代收点管理系统的设计与实现
开发语言·javascript·数据库·mysql·毕业设计·php·毕设
Dovis(誓平步青云)11 分钟前
一个分区超温就全棚浇水,控制系统怎样按区下策略
开发语言·前端·javascript·人工智能·机器学习
DevNote_1 小时前
1C1G 服务器从零配置实录(附完整命令)
linux·运维·服务器·javascript·adb·ssh·gmssh
Dovis(誓平步青云)1 小时前
切换语言后按钮被截断,本地化审计怎样发现长度风险
开发语言·前端·javascript·人工智能·机器学习·华为·harmonyos
CappuccinoRose1 小时前
拖拽交互体系
前端·javascript·css·html·交互·1024程序员节
开开心心就好1 小时前
免安装PDF盖章工具,透明度和位置可调
运维·服务器·前端·javascript·pdf·ocr·1024程序员节
2501_944521599 小时前
Ramda 跨端三方库仓颉适配全流程
开发语言·javascript·flutter·php
Ken_111511 小时前
小体积附件下载正常,大附件下载异常
javascript
变与不变80612 小时前
jQuery怎么使用
前端·javascript
paopaokaka_luck12 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法