let vs const
let 不存在变量提升
let 不允许重复声明
- (不论当前上下文中,基于何种方式声明过这个变量,都不允许声明)
在全局山下文中
-
基于 var/function 声明的变量,是给window(GO)设置的全局属性
-
基于 let/const 声明的变量是放在 VO(G)中,和GO没有任何的关系
let 会产生块级上下文
let 的暂时性死区问题
- 暂时性死区:声明之前使用
const 对象的属性可以修改吗? **
const 只能保证指针固定不变的,指向的数据结构属性,无法控制是否变化的
-
声明一个不可修改的常量,且必须在声明的同时初始化值
-
通过数组的索引值或者数组方法对数组进行的修改是被允许的,但是不允许对常量直接赋值
-
对象也是同理
const arr = [1,2,3,4,5]
arr[0] = 2 // 合法
arr.push(6) // 合法
console.log(arr) //[2,2,3,4,5,6]
arr = [1,2,3] // 错误
const obj = {name:'frank', age=18}
obj.age = 19 // 合法
obj.weight = 100 // 合法
console.log(obj) // {name:'frank',age=19,weight=100}
obj = {name:'lisa'} // 错误
let 与 var
- 声明提升 => 先上车后买票
console.log(name);
var name = "深爱楚长风"// undefined
- 变量覆盖 => 套牌车
var obj = '对象'
var obj = '新对象'
console.log(obj)
- var没有块级作用域 => 红杏出墙
function fn2(){
for(var i = 0; i < 5; i++){
}
console.log(i)
}
fn2();
// 5 undefined
let name2 = "大郎喝药了"
// console.log(name2)
let name3 = "潘金莲"
// let name3 = "西门庆"
function fn2(){
for(let i = 0; i < 5; i++){
// console.log(i)
}
// console.log(i)
}
fn2()
// 0 1 2 3 4
let name2 = "大郎喝药了"
// console.log(name2)
let name3 = "潘金莲"
// let name3 = "西门庆"