ES6中let与const的区别

ES6中新增了两个声明标识符let和const。

 一、 let用来声明变量,作用域是代码块(就是{}括起来的部分);

    1、使用let命令声明的变量在域解析的时候不会被提升


2、let在for循环中的使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ECMAScript</title>
</head>
<body>
<div>
    <button>1</button>
    <button>2</button>
    <button>3</button>
    <button>4</button>
    <button>5</button>
</div>
    <script>
       //let在for循环中的使用
       var btns=document.querySelectorAll('button');
        /*for(var i=0;i<btns.length;i++){
            btns[i].onclick=function () {
                //for循环每次做的事只是向数组中存入一个函数,这个函数的功能是 打印 i,但是函数并没有立刻执行。
                // 而这个i是通过var i 这句话来声明的。当for循环跑完,咱们都知道此时 i 的值是5。
                console.log(i)//55555 每次执行结果都是5
            }
        }*/
        //增加一个自身属性来解决(上面问题可以解决)
       /*for(var i=0;i<btns.length;i++){
           btns[i].idx=i;
           btns[i].onclick=function () {
               console.log(this.idx);//01234
           }
       }*/
        //利用闭包的形式解决(问题可以解决)
       /*for(var i=0;i<btns.length;i++){
           (function (a) {
               btns[i].onclick=function () {
                   console.log(a);
               }
           })(i);
       }*/
       //ES6 使用let解决(问题可以解决)
        for(let i=0;i<btns.length;i++){
            btns[i].onclick=function () {
                console.log(i)//01234
            }
        }
        //在循环语句之内是父作用域,在循环体内是自作用域
        for(let i=0;i<3;i++){
            let i=10;
            console.log(i);//3次10
        }
        console.log(i)//出错


    </script>




</body>
</html>

二、   const用来定义常量

const除了不能改变物理指针的特性,其他特性和let一样


数据一旦声明就不能改变了,否则就会报错。

当声明复杂类型的数据的时候,物理指针不可以改变,但可以改变起属性或增加新属性。




猜你喜欢

转载自blog.csdn.net/Doulvme/article/details/79919940