javascript高级部分05----es6之let,const声明变量与解构赋值

1.es6新增用法:let,const声明变量

   1.1  let声明变量,声明的变量属于块级作用域,不能重复声明,没有变量的提升


   1.1.1 let关键字声明的变量属于块级作用域。在函数中一个大括号代表一个块级作用域,用let声明的变量,在函数中只能在块级作用域中有效,但是在全局中的let的用法和var用法是一样的。
    <style>
        div {
            width: 200px;
            height: 200px;
            background-color: red;
            margin: 50px;
        }
    </style>
</head>

<body>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <script>
        var div = document.querySelectorAll('div');
        for (let i = 0; i < div.length; i++) {
            div[i].onclick = function() {
                console.log(i);
            }
        }
    </script>
</body>
 1.1.2  let关键字声明的变量不存在变量提升
console.log(num);  //报错,let声明的变量,不会有变量提升
        let num = 1;
        console.log(num1);  //undefined;var 声明的变量,会变量提升
        var num1 = 1;
1.1.3  let关键字不能重复声明同一个变量
let num = 1;
        let num = 2;
        console.log(num); //报错,let不能重复声明同一个变量
  1.2 const关键字声明的是常量,不能修改,也是只能在块级作用域中起作用,不存在变量提升,不能重复赋值,声明后必须赋值
  1.2.1 const关键字声明的是一个常量,不能被修改
const num = 1;
        num = 2;
        console.log(num);  //报错,const声明的是一个常量,定义完了之后,不能修改其值
 1.2.2  const关键字只在块级作用域中起作用
if (1) {
            const Name = 'zs';
        }
        console.log(Name);
1.2.3  const声明的常量不存在提升
 console.log(num);  //报错,const声明的常量没有常量提升
        const num = 1;
1.2.4 const声明后必须赋值
const num;
        console.log(num);  //报错,const声明的常量,在声明后必须赋值

1.3 const声明的常量是对象的情况:

const Person = {
            name: '李四'
        };
        Person.name = '张三';
        Person.age = 20;
        console.log(Person);  //不会报错

在这个案例中,在给const声明的对象中改变name属性,添加age属性的时候,Person没有报错,这是因为在声明对象这种复杂数据类型的时候,实际上在栈内存中存在的是对象的地址,在堆内存中存的是实际的对象,引用数据类型的值。这里改变的是Person对象本身,但是地址没有改变。当Person = {}的时候,也把Person的地址改变了。

2.解构赋值
2.1 解构赋值定义:从数组和对象中提取值,对变量进行赋值。

// 数组解构赋值
        let [a, b, c, d, e] = [1, 2, 3, 4, 5];
        console.log(a); //1
        console.log(b); //2
        console.log(c); //3
        console.log(d); //4
        console.log(e); //5
        //数组嵌套再结构赋值
        let [a, b, [c, d]] = [1, 2, [3, 4]];
        console.log(a); //1
        console.log(b); //2
        console.log(c); //3
        console.log(d); //4   
//对象的解构赋值
let {x,y,z} = {x:1,y:2,z:3};
    console.log(x,y,z); //1 2 3

    //对象解构赋值解构的是属性值
    let {b:a} = {b:2};
    console.log(a);  //2
    console.log(b);  //undefined

2.2 解构赋值的用途

// 解构赋值的用途
        // 1.可以用于两个变量之间的交换
        let x = 1;
        let y = 2;
        [x, y] = [y, x];
        console.log(x, y);  //2 1
        //2.提取函数返回的多个值
        function fn1(){
            return {name:'张三',age:12};
        }
        let {name,age} = fn1();
        console.log(name,age);  //张三 12
           
        // 3.定义函数参数
        function fn2({a,b,c}){
            console.log(a);
            console.log(b);
            console.log(c);
        }
        fn2({a:1,b:2,c:3})

        //4.函数参数的默认值
        function fn3({z=2}){
             console.log(z);
        }
        fn3({})
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值