ES6

相同点:都是块级变量

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

因为 其实在全局变量中保存的,他是递增的,在循环结束时的值为3windows.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最为稳妥的,避免被修改数据值
原文地址:https://www.cnblogs.com/ningxin/p/14448350.html