ES6 - let / const
相同点:都是块级变量
let 可赋值任意值,但是不能重复定义
let a=0; let a = 2; //会报错,说a已经被定义
块级作用域
尽在作用域内能取值,外部是取不到的
{ let a = 0; } console.log(a); //a is undefined for (var i = 0; i < items.length; i++) { item[i].onclick = function () { item[i].style.background = 'red' } }
此时点击div。点击事件会报错,因为它本身走的回调函数是item[3].style
因为 i 其实在全局变量中保存的,他是递增的,i 在循环结束时的值为3(windows.i);
但是如果此时把var i 换成let i 的话,就不会影响, 因为let只在其作用域内有效
更形象的表达就是:
{ let i=0; item[0].onclick = function (){ item[0].style.background = 'red' } } { let i=1; item[1].onclick = function (){ item[1].style.background = 'red' } } { let i=2; item[2].onclick = function (){ item[2].style.background = 'red' } }
const 定义常量(常量:值不能修改的量为常量)
- 可赋值任意值,
- 必须有初始值
- const A 是会报错的
- 潜规则 常量命名是要大写的,但是小写也没问题。
- 常量的值不能被修改
- 例如 const A = 0; A = 2;时会报错的
- 块级作用域
- 同let
- 对于数组和对象的元素做修改,不算做对常量的修改,不会报错,
- 必须有初始值
const A = ['1', '2', '3'];
A.push('4');
-
-
- 此时不会报错,因为A对应的地址没有改变,元素改变,但是地址没有改变,所以数组和对象使用const最为稳妥的,避免被修改数据值
-