zoukankan      html  css  js  c++  java
  • ES6新增----let const var的区别

    参考学习:https://www.cnblogs.com/LLLLily/p/7389652.html

    1. var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。
    2. let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
    3. const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。

    ES6的let变量声明特点:

    1. 拥有块级作用域
    2.没有变量声明提升
    3.暂时性死区
    4.不能重复声明
    5.let不会成为全局对象的属性
    

    以上let所介绍的规则均适用于const命令,不同的是,const声明的变量不能重新赋值,也是由于这个规则,const变量声明时必须初始化,不能留到以后赋值
    1.拥有块级作用域:
    let声明的变量只在所声明的代码块内有效。块级作用域由 { } 包括,if语句和for语句里面的{ }也属于块作用域。

    {
        var a = 10;
        let b = 20;  
    }
        console.log(a); //10
        console.log(b); // ReferenceError: b is not defined
    
    var a =[];
    for( var i=0; i<10; i++ ){
        a[i] = function(){
            console.log(i);
        }
    }
    
        for( var j = 0; j<a.length; j++ ){
            a[j](); //输出10个10。 因为i是var声明的,在全局范围内都用,每次新的i都会覆盖原来的。
        }
    
    var a =[];
        for( let i=0; i<10; i++ ){
            a[i] = function(){
                console.log(i);
            }
        }
    
        for( let j = 0; j<a.length; j++ ){
            a[j](); //输出 0,1,2,...,9
        }
    

    2.没有变量声明提升:
    使用let声明的变量,不会像使用var那样存在“变量提升“”的现象。所以使用let声明变量,必须遵循“先声明,后使用”的原则。否则会报错

    console.log(a); //ReferenceError
    let a = 10;
    

    如果是var声明的变量,则不会报错。

     console.log(b); //undefined
        var b = 10;
    

    3.暂时性死区:
    在代码块内,使用let声明变量之前,该变量都是不可以使用用
    只要在同一作用域内存在let命令,他所声明的变量就“绑定”在这个作用域内,不管外部有没有声明

    let a =10;
    function fn1(){
        console.log(a);
        let a = 5;
    }
    
    fn1();//Uncaught ReferenceError: a is not defined
    

    4不能重复声明
    在同一作用域内,如果使用var声明同一个变量,则后面的覆盖前面的

    var a = 10;
    let a = 10;
    
    console.log(a);//Uncaught SyntaxError:
                     Identifier 'a' has already been declared
    
    
    
    let a = 10;
    let a = 15;
    
    console.log(a);//Uncaught SyntaxError:
                     Identifier 'a' has already been declared
    

    5.let不会成为全局对象的属性

  • 相关阅读:
    【Prometheus学习笔记】主机监控 -node_exporter
    【Django学习笔记】-环境搭建
    【Python学习笔记】-虚拟环境virtualenv
    对象存储服务-Minio
    网络流各算法超详细带源码解析
    做题记录节选
    日常
    板刷NOI
    题解 宝石
    题解 矩阵游戏
  • 原文地址:https://www.cnblogs.com/princeness/p/11664898.html
Copyright © 2011-2022 走看看