我的ES6
ES5中,声明变量用var,ES6为什么会新增let和const两个关键字呢?
var的四个缺点
1.存在变量提升
console.log(a) // undefined
var a = 0
console.log(a) // 0
2.同一个作用域下可以重复声明
var x = 1
var x = 2
console.log(x) //2
3.不存在块级作用域
if (false) {
var x = 1
}
console.log(x) // undefined
// <===>
var x
if (false) {
x = 1
}
console.log(x) // undefined
4.不可以限制修改
var只能声明变量,不能声明常量
var pi = '3.14'
pi = 11
console.log(pi) // 11
let & const
1.相同点:
- 都不存在变量提升,正确的使用步骤:必须先声明,再使用
// var 的情况
console.log(foo); // 输出undefined
var foo = 2;
// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;
- 同一个作用域下不可以重复声明
// 在同一个作用域下不可重复声明
let a = 1
let a = 2
const b = 2
const b = 3
console.log(a)
console.log(b)
- 都存在块级作用域
{
let c = 99
console.log(c) // 99
const a = 100
console.log(a) // 100
}
console.log(c) // c is undefined
2.不同点:
- let:可多次赋值
let a = 1;
a = 2;
console.log(a) //2
- const:一旦赋值了,就不能再次赋值了,声明的时候必须赋值(不能先定义再赋值)
const b = 1;
b = 2;
console.log(b) // Uncaught TypeError: Assignment to constant variable.
3.const
- 命名规范:
- const声明的常量一般采用大写字母配合下划线
- 例如:const PI = Math.PI
- const VUE_APP_BASE_URL = “http://xxx.com/api/cart”
两个问题
const定义的数组可以做pop、push等操作吗?
const定义的对象可以改变属性值吗?
答:数组和对象都是引用类型,我们只是通过名字修改了内存地址里面的值,所以可以做引用类型改动操作。但如果对常量重新赋值,就会报错。
水平有限,还不能写到尽善尽美,希望大家多多交流,跟春野一同进步!!!
相关资料
- https://es6.ruanyifeng.com/
- https://www.bilibili.com/video/BV1n34y1B7f2?p=3
水平有限,还不能写到尽善尽美,希望大家多多交流,跟春野一同进步!!!