zoukankan      html  css  js  c++  java
  • js es6 let const的区别

    ---------------let--------------------
    能向下兼容

    let跟var 的相同点
    1.var有的let都有

    1 console.log(a) //undefined
    2 var a=1;//提升变量声明
    3 console.log(b) //报错
    4 let b=2;//不存在变量提升

    ----------let特点----------------

    变量只允许声明一次/不能重复声明
    如果var 声明了一次,let再声明就报错

    var a=1;
    let a=2;//报错
    
    //这里是暂时性死区 TDZ
    let a =1 
    {
    //块作用域里的a自动绑定当前作用域,为当前作用域的a,所以报错.
    console.log(a)//报错.因为let 只在声明时存在,不存在var提升变量
    let a=2;
    console.log(a)
    }

    ---------------------------
    let 声明的全局变量不再跟顶层对象挂钩

    var a=1;//window.a输出为1;
    let b=2;//window.b输出为und,真的全局
    
    function fn(arg){
    //形参相当于var arg;
    {
    let arg=2;
    }
    }


    -------------块作用域------------------

    说到let,就不得不说一下块作用域
    块作用域是独立的,自执行,没有返回值,可以拿到父级的参数.
    如果块作用域里有var,那么var 的这个参数相当于声明在全局,
    除json,function外,带{ }的语句有let/const都是块作用域

    {
    //块作用域
    let a = 1
    
    }
    
    console.log(a) //报错
    
    
    do{
    //拿到块作用最后的一条语句(试用而已)
    }

    重点来了:比方说for循环,用let时,每次循环的结果都是独立的块作用域.
    而用var的话,结果每次都是10,不独立.

    let arr =[]
    for(let i=0;i<10;i++){
    arr[i]=function(){
    console.log(i)
    }
    }
    arr[1]()//1
    arr[2]()//2

    但是如下的话,for()里的内容相当于一个隐藏的作用域(相当于赋值i,跟var一样),相当于{}内容的父级,所以引用的是全局的i

    let arr =[]
    let i;
    for(i=0;i<10;i++){ 
    arr[i]=function(){
    console.log(i)
    }
    }
    arr[1]()//10

    总的来说,for的括号里如果是有let就是单独的一个作用域(括号里独立),var会泄漏到全局,所以相当于在全局声明了一个变量.



    ----------const---------------
    用来声明常量的,只允许赋值一次,不能改变
    let所有特性,const都有

    let和const的区别有两点
      1.const声明变量必须立即初始化值,不能留到后面
      2.一旦变量声明就不可修改

    本质:保存是对象的内存指针

    const a=[1];//相当于家
    a[0]=2//可以拓展,相遇于装修
    console.log(a);//[2];
    
    const b={}
    b.c=1;
    console.log(b)//{c:1};
  • 相关阅读:
    【技能】Ext.Viewport 实现左三右一排列方式。
    Android之——短信的备份与还原
    草根做项目的经验分享一
    【转】每天一个linux命令目录
    【转】每天一个linux命令(61):wget命令
    【转】每天一个linux命令(60):scp命令
    【转】每天一个linux命令(59):rcp命令
    【转】每天一个linux命令(58):telnet命令
    【转】每天一个linux命令(57):ss命令
    【转】每天一个linux命令(56):netstat命令
  • 原文地址:https://www.cnblogs.com/grhino/p/8546986.html
Copyright © 2011-2022 走看看