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.暂时性死区

    如果区块中存在letconst命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。

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  }        

 

posted @ 2017-03-27 21:59  YaXinwang  阅读(127)  评论(0编辑  收藏  举报