let const 下篇
1.不存在变量提升
在之前的js代码中,声明一个变量或者是函数,会存在变量提升的现象,也就是说变量可以在声明之前使用,值为undefined;
es5:
1 console.log(a); //undefined 2 3 var a = 10;
es6:
console.log(a); //a is not defined let a = 10; console.log(a); //10
2.暂时性死区
如果区块中存在let
和const
命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
var a=10; { console.log(a); //报错 let a=5; }
2.let 与 const 声明全局对象,但不是window对象。
var a = 1; // 如果在Node的REPL环境,可以写成global.a // 或者采用通用方法,写成this.a window.a // 1 let b = 1; window.b // undefined
const 常量
const
声明一个只读的常量。一旦声明,常量的值就不能改变。
const
来说,只声明不赋值,就会报错。
const
赋值为对象或者数组,可以继续为对象和数组添加成员。因为const常量 保护的是对象和数组的地址不变,就不会报错。
const 常量冻结-----Object.freeze();
自定义冻结方法:
1 var constDongJie = (obj) => { 2 Object.freeze(obj); 3 Object.keys(obj).forEach((key,val) => { 4 if( typeof obj[key] === 'object' ){ 5 constDongJie(obj[key]); 6 } 7 }) 8 }