美文网首页
第二小节:let和const关键字

第二小节:let和const关键字

作者: Janicerant | 来源:发表于2017-12-04 20:31 被阅读0次

            var全局变量不小心覆盖掉别人已经使用的变量,会导致一些很奇葩的bug,并且难以定位。这时候letconst变量的优势就展现出来了,不能在同一个作用域中重复声明同一个变量。

    
    <script>
        let count = 10;
        let  discount = 0.9;
        const key = 'abc123';
        if(count > 5){
            console.log('ran');
            let discount = 0.5;
        }
    </script>
    
    

    这个在控制台中let discount还是输出0.9,而块级作用域中的let discount = 0.5并没有覆盖之前的变量,这是因为let变量在块级作用域中只对所在的区域起作用,和全局中的毫无干系。

    接下来要说的是letconst的不同之处:
            let变量可以在不同作用域中重复声明,但是const变量不可以。

    <script>
        const person = {
            name:'lucy',
            age:20
        }
        console.log(person)
    </script>
    

            在后台控制台中输出person={name:'bool'}会出现报错,但并不是说const声明的变量是不可以改变的,它的属性还是可以改变的。继续输出person.age=21,然后age成功变成21,改变了person的属性,这是因为person赋值为一个对象,对象是一种引用类型的值,当你如果重新赋值一个新的对象时,这个指针就指向另外一个地方,指向了两个不同的地方那就不是同一个对象。也可以这么理解:一个人是无法改变的,但是她的年龄会随时间的流逝而改变。只要人你不改变,改变其他的属性也是可以的。
            当然啦,如果你连属性值也不想让别人修改的话可以使用Object.freeze()方法。如下

    <script>
        const person = {
            name:'lucy',
            age:20
        }
        console.log(person)
        const lucy = Object.freeze(person);
    </script>
    

            最后总结一下:let值是可以更新的,const值是不可以更新的,但是你要注意它是引用类型的时候哦。

    相关文章

      网友评论

          本文标题:第二小节:let和const关键字

          本文链接:https://www.haomeiwen.com/subject/vexfixtx.html