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

浙公网安备 33010602011771号