JavaScript 用var、let、const所声明变量的区别

本文详细比较了JavaScript中var、let和const在变量声明、作用域、提升及常量性质方面的区别,强调了let和const的块级作用域、暂时性死区以及const的不可变性。
摘要由CSDN通过智能技术生成

一、作用域

  声明变量时,无论是用var,let还是const,所声明的变量都有一个共同点:在全局作用域声明的变量是全局变量,在函数作用域中声明的变量为局部变量。在这一点上,他们的效果和用法是相同的。
  它们的不同点在于,let和const声明的变量存在块级作用域,也称暂时性死区,它们在声明的块级作用域内有效,包括{}内的代码块。

二、变量的声明与访问

var与let

1.let声明的变量不能提升

	console.log(a); //undefined
	var a=10;

 用var声明的变量其声明会被提升到当前作用域的最前方(赋值不提升),上述代码相当于:

	var a;
	console.log(a);
	a=10;
	console.log(a);  //报错
	let a=10;

 用let声明的变量不会提升,报错:变量的使用要在声明之前

2.let变量不能重复声明

	var b=10;
	var b=20;
	console.log(b) //20
	------------------------------------------------------------
	let a=10;
  ~~let a=20;~~ 
	console.log(a) //报错

 var声明的变量写在后面的赋值可以覆盖前面的,打印b的值是20,而let变量不可以重复声明,此时会报错:变量a已被声明

3.let声明的变量只在当前块作用域中有效

	var a = 10;
    if (1) {
        let a = 20;
    }
    console.log(a); //10

 正常情况下只有function会产生局部作用域,而let a写在var a之后,后赋值的a会覆盖先赋值的a,打印a的结果应该是20,但是这里是10。这是因为let声明的变量会在其{}内产生一个块级作用域,称为暂时性死区,此时let声明的变量只在此块级作用域中有效。

4.let声明的变量会产生暂时性的死区,只能在当前块作用域中查找

	var b = 10;
    if (1) {
      console.log(b); //10
      var b = 20;
    }
    -----------------------------------------------------------
	var a = 10;
    if (1) {
      console.log(a); //报错
      let a = 20;
    }

 上文我们已经知道了什么是暂时性死区,尽管用var声明了变量a,在暂时性死区中若有用let声明的与死区外部同名的变量,则死区内使用a变量的语句或者方法只会在死区内查找变量a,而不会到死区外部查找,而let声明的变量不能提升,此时会报错:变量的使用要在声明之后。

var与const

 首先要明确,const声明的标识符为常量,而常量是不可改变的量。

1.const声明的常量必须赋初值

	var a;
	console.log(a) //undefined
	const b; //报错 Missing initializer in const declaration  常量声明中缺少初始值

2.const声明的常量一旦赋值则无法再改变

	const a=10;
	a=20;
	console.log(a); //报错 Assignment to constant variable. 把变量赋值给了常量

 除了上述两点区别之外,var与let还有四点区别,和var与let的四点区别一致,这里就不做过多赘述了。希望此文章对你有所帮助。

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值