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对象,在最新的实现其实浏览器添加的全局对象


浙公网安备 33010602011771号