let const小结

let用法

1.基本用法

  • 代码块内有效:用法类似于var,但let声明的变量,只在let命令所在的代码块内有效
  • for语句中使用:let在for语句中定义声明变量i,每一轮循环变量i都是重新声明的。设置循环变量部分是父作用域,循环体内部是单独的子作用域,即在这两个作用域中声明同一个let变量不会报错
  • 不存在变量提升:不同于var,let不存在变量提升,在声明的块级作用域内,声明语句之前,使用变量会报错
  • 暂时性死区:块级作用域内,let声明的变量,绑定这个区域,不受外部影响;由于暂时性死区,typeof在ES6环境,变得不再绝对安全
  • let x = x; 这种语句是会报错,而var x =x; 不会报错,原理是let的先声明,后使用的原则
  • 不允许重复声明: 相同作用域内部允许重复声明变量,当然函数体内重新使用let声明形参也是不允许的

2.块级作用域

  • 任意嵌套: 使用花括号,可以进行多层嵌套,每层都具有独立的作用域
  • ES5实现块级作用域写法: 使用立即执行函数(fucntion(){...}());
  • 关于函数在块级作用域中声明问题: 避免在块级作用域中声明函数,如需要,使用函数表达式

const用法:

  • 只读常量,常量的值不能改变;本质是变量指向的内存地址保存的数据不得改动;对于复杂数据类型,保存的是指向实际数据的指针,即对于复杂数据类型,可以修改器属性和值,但不能修改其指向
  • 变量不提升,存在暂时性死区,不可重复声明

3.在ES5环境下实现let代码实例:

// 如何在ES5环境下实现let
(function(){
  for(var i = 0; i < 3; i++){
    console.log(i);
  }
}());
console.log(i);

/*输出结果:
0
1
2
print.js:9 Uncaught ReferenceError: i is not defined
 * /

 4.在ES5环境下实现const代码实例:

//ES5中实现const的实例:
function _const(key,value){
  var desc = {
    value,
    writalbe: false
  };
  Object.defineProperty(window,key,desc);
}
_const('a', 2);
_const('obj', {a: 1});
obj.a = 2
console.log(a,obj.a); //2,2
obj = {}; //TypeError: Cannot redefine

 

posted @ 2020-04-15 16:17  fontEnd_whws  阅读(85)  评论(0)    收藏  举报