这两个的出现,总感觉是为了开发的代码规范而出现的。我们要逐渐放弃var,在项目中多用let和const
与var的区别:
-
var有变量提升,有初始化提升,值可变
-
let有变量提升,没有初始化提升,值可变
-
const有变量提升,没有初始化提升,值不可变,但如果是定义对象,则属性可变
暂时性死区
问题说明:其实let和const
是有变量提升的,但是没有初始化提升:
var name = '林三心'
function fn () {
console.log(name)
let name = 'sunshin_lin'
}
fn() // Cannot access 'name' before initialization
块级作用域解决问题:
for(var i = 0; i < 5; i++) {
setTimeout(() => {
console.log(i)
})
} // 5 5 5 5 5
for(let i = 0; i < 5; i++) {
setTimeout(() => {
console.log(i)
})
} // 0 1 2 3 4
2、默认参数
开发中你曾遇到过这样的问题,如果参数不传进来,你就设置默认参数
function fn (name, age) {
var name = name || '林三心'
var age = age || 18
console.log(name, age)
}
fn() // 林三心 18
但是这么写确实不优雅,可以使用ES6的默认参数
function fn (name = '林三心', age = 18) {
console.log(name, age)
}
fn() // 林三心 18
fn('sunshine', 22) // sunshine 22
3、扩展运算符
曾经的我,想要拼接多个数组,我只能这么做
const arr1 = [1, 2, 4]
const arr2 = [4, 5, 7]
const arr3 = [7, 8, 9]
const arr = arr1.concat(arr2).concat(arr3)
[
1, 2, 4, 4, 5,
7, 7, 8, 9
]
现在的我,可以更优雅地进行拼接