美文网首页
ES6中的const及临时死区(Temporal Dead Zo

ES6中的const及临时死区(Temporal Dead Zo

作者: 莫晓白 | 来源:发表于2017-10-19 23:54 被阅读0次

    const声明的是常量,声明的同时必须进行初始化。

    const value = '莫小白';
    console.log(value);
    
    图片.png
    const value;
    value =  '莫小白'
    console.log(value);
    
    图片.png

    在声明常量的同时必须赋值,不可声明变量后在赋值。

    const声明的常量,只在当前作用域才能被访问,除了这个作用域常量将会被销毁

    var isTrue = true;
    if( isTrue){
            const value  = '莫小白';
            console.log(value);
     }
    
        console.log(value);
    
    图片.png

    在if语句之外value就会被系统销毁

    如果说,我们需要使用const声明一个变量,而且后期需要修改这个变量,我们应该怎么办。我们需要将这个变量声明成一个对象,我们可以修改这个变量的属性。

    const person = {
            name:'莫小白'
        };
        console.log(person.name);
        person.name = '于小沫';
        console.log(person.name);
    
    图片.png

    我们可以更改属性值,但是,我们不可以修改绑定!!!

    const person = {
            name:'莫小白'
        };
        console.log(person.name);
        person = {
            name:'于小沫'
        };
        console.log(person.name);
    
    图片.png

    临时死区
    因为let 和 const 并不会声明提前,所以即使我们使用typeof访问变量也会报错

    console.log(typeof value);
    let value = 'js';
    
    图片.png

    在js中,const和let声明的变量,会保存到TDZ中。只有当程序运声明变量后,变量会从TDZ中移出,变量才可以正常访问。举个例子

    function getType(isTrue){
            console.log(typeof value);
            if(isTrue){
                let value = '莫小白';
                console.log(typeof value);
            }
            console.log(typeof value);
        }
        getType(true);
    
    图片.png

    第一个consle在变量value的代码块外执行的,此时value并不存在TDZ中。这也就是说不存在value这个绑定,typeof会返回一个 undefined 。第二个console因为value已经被创建可以正常访问。第三个console因为在value的代码块外执行的,且这时候value已经被销毁,所以返回一个 undefined 。

    相关文章

      网友评论

          本文标题:ES6中的const及临时死区(Temporal Dead Zo

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