let和const

let/const是新增的可以用来声明变量

1:const 的值不能改变,但是如果赋值的是引用类型,就可以通过引用找到对应的对象,然后修改对象的内容

1 const mingzi = 'tyy'
2     // mingzi = 'tsf' 这样程序会报错
3 const obj = {
4     foo: 'heihie'
5 }
6 obj.foo = '我被修改啦'
7 console.log(obj.foo); //这样可以修改

 

 

 2: var可以重复声明变量,但是let和const不能重复声明变量

1 var x = 10
2 var x = 5
3 const y = 5
4 const y = 10
5 console.log(x, y);

这样 const会报错

3:作用域提升

var会作用域提升,但是let和const不会

 

 

 但是如果修改一下

 

 

 

 注意:这并没有说明const声明的变量会在执行是才创建,而是这些变量会被创建在包含他们的词法环境被实例化时,但是是不可以访问它们的,直到词法绑定被求值;所以说它没有作用域提升。

4:window 对象添加属性

var 在全局声明变量的时候都会在window上面添加属性,但是let/const不会,那它们的变量保存到那里呢,在最新的标准中,说明了声明的变量和环境记录是被保存在变量环境中的(vm),l例如V8引擎是通过varibleMap里的一个hashmap来存储的,window对象是早期的GO对象,在最新的实现其实浏览器添加的全局对象

 

posted @ 2022-03-22 21:26  沁霓  阅读(39)  评论(0)    收藏  举报