一:var,let,const区别?
var 默认是会变量提升的,变量可以修改;
let 定义变量,变量可以修;
const 定义必须有常量值,const的值写上不可更改;
let 与const相同之处:
1> 都是块级作用域,适用于 {},在括号外面打印里面的值会报错;
2> 变量不可提升。
3>暂时性死区(只要块级作用域内,存在let,const,它所声明的变量就绑定(binding)在这个区域,不再受外部影响。)
如何选择var/let/const:
从ES6引入let的语法,设计的初衷便是替代var。从工程化的角度来说,我们应从ES6后遵从以下三原则:
- List item一般情况下,使用const在定义常量。
- 只有明确值会被改变时,我们才使用let定义变量。
- 不再使用var。
二:const锁定了什么,如何锁定对象
- const锁定了什么
首先,我们用const声明一个 “常量”,实际是创建了一个不可修改的指针,指向内存中一块区域。我们交给const“常量”的内容就在这块区域中,所以就是锁定了地址 - 如何锁定对象
Object.freeze() 方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。