ES6新增特性-var、let、const

es5中只有全局作用域和函数作用域概念,es6中提出了块级作用域的概念,就是{}包裹的区域。

目录

1、var的特性

2、let和const的特性

3、const的其他特性


1、var的特性

  • var存在变量提升

变量提升就是,将var声明的变量提升到作用域的最开始声明,然后得到undefined的值,而let和const不存在变量提升。

//就是在未运行到声明变量的代码之前使用该变量不会报错。
console.log(a); // undefined  ===>  a已声明还没赋值,默认得到undefined值
var a = 100;
console.log(b); // 报错:b is not defined  ===> 找不到b这个变量
let b = 10;
console.log(c); // 报错:c is not defined  ===> 找不到c这个变量
const c = 10;
  • var声明的变量会挂载到window上,let和const不会
var a = 100;
console.log(a,window.a);    // 100 100

let b = 10;
console.log(b,window.b);    // 10 undefined

const c = 1;
console.log(c,window.c);    // 1 undefined

2、let和const的特性

  • let和const是块级作用域,在块级作用域外使用let声明的变量会报错
if(1){
    var a = 13;
    let b = 10;
}
console.log(a); // 13
console.log(b)  // 报错:b is not defined  ===> 找不到b这个变量
  •  let和const不可以重复声明,var可以重复声明,结果会被最后一次声明的赋值覆盖
var a = 100;
console.log(a); // 100
//再次声明
var a = 10;
console.log(a); // 10

let a = 100;
let a = 10;//  控制台报错:Identifier 'a' has already been declared  ===> 标识符a已经被声明了。

3、const的其他特性

  • const被声明时必须赋值,不能使用null占位
  • const声明后的值不允许修改,但复杂类型object除外
const a = 2;
a = 5 //报错 Uncaught TypeError: Assignment to constant variable.

const arr = [1,2,3]
console.log(arr) //[1,2,3]
arr[1] = 4;
console.log(arr) //[1,4,3]

为什么复杂类型可以被修改?

因为复杂类型储存在堆上,栈上只是存储了引用的指针,只要引用地址不改变就不会触发const报错。

猜你喜欢

转载自blog.csdn.net/m0_37756431/article/details/123188587