var与let的区别【一看就懂的知识】

今天偶尔翻看了一本书《JavaScript编程精解》,在函数这一章节中难免会看到“作用域”这个字眼,之前对于作用域的概念本就不是很敏感,也就匆匆略过了,反过来看时,才明白这是一个比较重要的点。下面借作用域这一概念深入了解一下本文的重点——var与let的区别。

通常我们变量分为全局变量和局部变量,为了避免变量名的覆盖和滥用,我们尽量使用局部变量,当使用时创建,不使用时释放。如何正确去声明变量,也成了一个比较重要的话题,var与let关键字都是用来声明变量的,那么如何去选择呢?

1.var是函数作用域,let是块级作用域

var a = 1;
{
    var a = 2;
    //...
}
//...

对于一些开发者来说,希望使用大括号为任意代码块创建一个局部环境,但在JavaScript中,只有函数能够创建新的作用域。在上述代码中,代码块中的变量a其实引用的是代码块外部的那个同名变量,实际上,虽然JavaScript用于使用大括号创建代码块,但其作用仅限于在if语句或循环语句中组织代码体而已。在ES6中引出let关键字,就是为了解决这一问题。

var是函数作用域,let是块级作用域。比如在for循环内,用var声明变量,在for循环外也可以访问到,但let不同,若使用let在for循环内声明变量,那么在外部是访问不到的。如下:

//使用var声明变量
for (var i = 0; i < 10; i++) { }
console.log("i的值=" + i)

//使用let声明变量
for (let j = 0; i < 10; i++) { }
console.log("j的值=" + j)

 2.var存在变量提升,let不存在变量提升

变量提升这一概念在使用关键字var声明变量时是存在的,var可以先使用再声明,在变量没有被声明的时候,其值为undefined;但在使用let关键字声明变量时,必须先声明再使用,否则会报错。如下:

//var的使用
console.log("还未被定义的a=" + a)
var a = 1;
console.log("已被定义的a=" + a)

//let的使用
console.log("还未被定义的b=" + b)
let b = 1;
console.log("已被定义的b=" + b)

 3.var变量可以重复声明,let变量不可以重复声明

在多人进行开发中,不同的人可能会使用相同的变量名,在这时,由于每个人声明的变量名都有不同的用法,所以就会出现问题。使用var会进行变量名的覆盖,显然这并不是我们想看到的;而使用let不会出现这一问题。如下:

//var
var a = 1;
var a = 2;
console.log(a)

//let
let b = 1;
let b = 2;
console.log(b)  //报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值