JavaScript中const,let和var的区别

var声明的变量:没有块级作用域,而且存在变量提升的情况

变量提升

  • 所有的声明都会被提升到作用域的最上面
  • 同一个变量只会声明一次,其他的会被忽略掉或者覆盖掉

例一:

    console.log(a); 
    var a = 123; 

打印的结果:

undefined

解析:上面代码经过预编译后应该是下面这样的

var a;
console.log(a);
a = 123;

例二:

console.log(v1);
var v1 = 100;
function foo() {
    console.log(v1);
    var v1 = 200;
    console.log(v1);
}
foo();
console.log(v1);

打印结果:

undefined
undefined
200
100

解析:经过预编译的代码,注意:var声明的变量是有函数作用域的

var v1;
console.log(v1);	//undefined
v1 = 100;
function foo(){
	var v1;
	console.log(v1);	//undefined
	v1 = 200;
	console.log(v1);	//200
}
foo();
console.log(v1);	//100

var声明的变量不存在块级作用域(ES6中新增块级作用域)

常见的块级作用域有if语句,for循环等等。
例一:

var num = 123;
if(true){
   console.log(num) // 123
   var num = 456;
   console.log(num)  // 456
}
console.log(num)  // 456

打印结果:

123
456
456

预编译后的代码:

var num;
num = 123;
if(true){
	console.log(num);
	num = 456;
	console.log(num);
}
console.log(num);

可以看到在块作用域if语句中,并不存在var声明的变量num的变量提升。

const 常用来声明常量,且常量不可修改,必须初始化,存在着块级作用域

不存在变量提升

console.log(a); 
const a = 123; 

运行结果

Uncaught ReferenceError: Cannot access 'a' before initialization

存在块级作用域

const num = 456
if(true){
  const num = 789;
  console.log(num); // 789
}
console.log(num) // 456

打印结果:

789
456

“常量不可修改”指的是对应的内存地址不可更改,而不是对应的值不能更改

const a = {};
a.b = 13;

上述代码不会报错

let存在块级作用域,没有变量提升

let num = 456
if(true){
  let num = 789;
  console.log(num); // 789
}
console.log(num) // 456

打印结果:

789
456

参考链接

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值