• js es6中let const和var的区别


    let,const是es6种新增的关键字;

    let的特点:

    1. let声明的变量只在let所在的代码块有效
    2. let没有变量提升功能,所以作用域只在所声明的代码块中,在该代码外之外都访问不到
    3. let变量只能声明一次,不能重复声明(同一个作用域下)
    {
        let a=1;
        console.log(a);//1
    }
    console.log(a);//Uncaught ReferenceError: a is not defined,报错不会继续往下执行
    let a=2;
    console.log(a);
    let a=2;
    console.log(a);//2
    {
        let a=1;
        console.log(a);//1
    }
    console.log(a);//2

    var的特点:

    1. var可以重复声明变量
    2. var有变量提升的租用,所以声明变量是全局作用域,但js种函数是可以控制var声明的变量是局部作用域
    {
        var a=1;
        console.log(a);//1
    }
    console.log(a);//1
    var a=2;
    console.log(a);//2

    const的特点:

    1. const是声明一个只读的常量,一旦声明,常量的值就不能改变
    2. 一旦声明必须赋值,否则会报错
    const PI=3.1415926;
    console.log(PI)//3.1415926
    
    console.log('==================')
    
    const PI2;
    console.log(PI2)//Uncaught SyntaxError: Missing initializer in const declaration
    //一旦声明必须初始化,否则报错
    
    const obj={a:1};
    obj.a=2;
    console.log(obj)//{a:2}
    //此时obj是个对象,obj存储的是对象的地址,地址没有改变,所以此时不会报错
    
    obj=function(){
        return 2;
    }
    console.log(obj)//报错
    //把一个对象重新赋值给了obj,此时改变了对象的指针指向

    let 和const都有封闭性死区的特性:

    let a=123;//代码块外定义了一个变量a
    if(true){
        console.log(a);//报错Uncaught ReferenceError: a is not defined
        let a=111;//代码块内定义了一个变量a,
        console.log(a);//111
    }
    var A=1;
    if(A>0){
        console.log(A);//A is not defined;
        const A=666;
    }

    es6明确规定:代码内如果存在let或者const,代码块会对这些命令声明的变量会从代码块的开始就形成一个封闭的作用域。代码块内,在声明变量a/A之前使用它就会报错。

    备注:从{开始,到}结束,代码形成一个封闭的区域,不管代码块外边是否用let/const对当前变量进行了定义,代码块中的变量都不受影响。因为不在同一个作用域下,如果是同一个作用域,变量是不能重复声明的。

  • 相关阅读:
    Android开发经验一判断当前屏幕是全屏还是非全屏
    Android得到控件在屏幕中的坐标
    MyBatis简单的增删改查以及简单的分页查询实现
    Coreseek:第二步建索引及測试
    极静之渊
    统计电影票房排名前10的电影并存入还有一个文件
    AAA
    FreeLink开源呼叫中心设计思想
    树后台数据存储(採用webmethod)
    [乐意黎原创] 百度统计这个坑爹货
  • 原文地址:https://www.cnblogs.com/fanfanZhao/p/12179752.html
Copyright © 2020-2023  润新知