ES6 let和const详解

    科技2025-11-10  10

    ES6语法

    let

    声明变量 ES3.1声明变量方式 //var num = 100(直接挂再window上。容易造成全局污染) ES6声明变量方式 //let num = 100(不会造成全局污染) let不允许重复声明 let不会有声明提前 ? 在人为效果上是没有声明提前,而实则将数据保存到临时性死区中

    Cannot access 'num' before initialization //出现这种错误时表式将数据保存到临时性死区

    {}

    块级作用域 ES3.1局部作用域

    (function(){ var num = 100;//通过匿名函数创建局部作用域 })()

    ES6块级作用域

    { var num = 100;//与局部zuo'yong }

    const

    常量声明 const不允许重复声明 const不会有声明提前 且常量不允许改变值 ?

    //实则是不允许改变内存空间的地址。 const obj={}; obj.name = "jack" console.log(obj)//{name:jack} //const声明和赋值必须一次性完成,并且后期不允许改变存储空间地址 const abc; abc = 123; console.log(abc)//报错,

    需要注意的闭包问题

    碰到以下类似的问题需要注意自己的let是否用的到位; 如果不到位就会出现解决了一个问题还会产生其他的新问题。

    //控制台有什么内容,怎样改动才可以输出0123456789 var arr = []; for(var i = 0;i<10;i++){ arr[i] = function(){ console.log(i); } } arr[0]() arr[1]() arr[2]() arr[3]() arr[4]() arr[5]() arr[6]() arr[7]() arr[8]() arr[9]() console.log(i) //实际上这个问题分成两问 //1.是输出数组0-9这个比较简单,在开始循环中将var i 改成 let i 即可 //2.输出这i这个才是个掉坑的地方,当你将开始循环中将var i 改成 let i之后{}形成了一个块级作用域, //再想输出i是就会报错 //解决方法添加立即执行函数 var arr = []; for(var i = 0;i<10;i++){ (function(i){ arr[i] = function(){ console.log(i); } })(i) } arr[0]() arr[1]() arr[2]() arr[3]() arr[4]() arr[5]() arr[6]() arr[7]() arr[8]() arr[9]() console.log(i)
    Processed: 0.013, SQL: 8