zoukankan      html  css  js  c++  java
  • let 与 const 的用法

    let 与 const 的用法

    • let 用来声明变量,并且会在当前作用域形成 代码块
    • conts 用来声明常量,所谓常量就是物理指针不可以更改的变量。
    • 所谓代码块,最简单的做法就是(这个 {} 就是一个代码块) :
    {
        let a = 1;
    }
    console.log(a)  // 报错 a is not defined


    一.let

    1)let 声明变量,变量不会被提升。

    function fn1(){
        console.log(a);
        let a = 1;
    }
    fn1();  // 报错
    
    var b = 2;
    function fn2(){
        console.log(b);
        let b = 1;
    }
    fn2();  // 报错

    2)for 循环中 使用let 定义变量,只在for的循环周期内可以使用。

    // 在ES5 中如果想使用for循环每次的i需要使用闭包的特性,每次执行都会被覆盖直到循环结束
    var arr = [];
    for(var i=0; i<5; i++){
        arr.push(function(){
            console.log(i);
        })
    }
    arr[1]()  // 5
    arr[2]()  // 5
    arr[3]()  // 5
    arr[4]()  // 5
    
    
    如果使用ES6提供的let来声明变量:
    var arr = [];  // let arr = [] 都可以
    for(let i=0; i<5; i++){
        arr.push(function (){
            console.log(i)
        })
    }
    arr[0]()  // 0
    arr[1]()  // 1
    arr[2]()  // 2

    所以大家在使用的时候需要注意以下几个问题:

    let i; 
    for(i = 0; i < 5; i++){
        setTimeout(function(){
            console.log(i);  //  5 5 5 5 5
        },1000)
    }

    不同于:

    for(let i = 0; i < 5; i++){
        setTimeout(function(){
            console.log(i);  //  0 1 2 3 4
        },1000)
    }


    二.const

    const 除了不能改变物理指针的特性,其他特性和 let 一样。

    当声明普通数据类型的时候,那么一但声明了,就不可以再改变。

    const a = 1;
    
    a = 2;  //Uncaught TypeError: Assignment to constant variable.

    当声明复杂数据类型的时候,物理指针不可以改变,但是可以改变数据内的属性值,以及可以给数据添加新属性等操作。

    const o = {a: 1};
    
    o.a = 2;
    o.b = 3;
    
    console.log(o);
    
    o = {};  // 报错


    // ES6
    "use strict"
    function a(){
        console.log(1);
    }
    function fn(){
        a();
        if(false){
            function a(){
                console.log(2)
            }
        }
    }
    fn();

    三. var、let、const的区别

    1. var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。
    2. let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
    3. const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。
    <script type="text/javascript">
        // 块作用域
        {
            var a = 1;
            let b = 2;
            const c = 3;
            // c = 4; // 报错
            var aa;
            let bb;
            // const cc; // 报错
            console.log(a); // 1
            console.log(b); // 2
            console.log(c); // 3
            console.log(aa); // undefined
            console.log(bb); // undefined
        }
        console.log(a); // 1
        // console.log(b); // 报错
        // console.log(c); // 报错
    
        // 函数作用域
        (function A() {
            var d = 5;
            let e = 6;
            const f = 7;
            console.log(d); // 5
            console.log(e); // 6  (在同一个{ }中,也属于同一个块,可以正常访问到)
            console.log(f); // 7  (在同一个{ }中,也属于同一个块,可以正常访问到)
    
        })();
        // console.log(d); // 报错
        // console.log(e); // 报错
        // console.log(f); // 报错
    </script>
     
  • 相关阅读:
    Spring IOC容器基于配置文件装配Bean(5) ------通过工厂方法配置bean
    Spring IOC容器基于配置文件装配Bean(4) ------bean生命周期
    Spring IOC容器基于配置文件装配Bean(3) ------装配集合属性
    Spring IOC容器基于配置文件装配Bean(2) ------通过setter或构造方法注入
    Spring IOC容器基于配置文件装配Bean(1) ------设置autowire自动装配
    Java实现序列化的作用和目的
    静态语言与动态语言
    C# WinForm 界面控件
    C# 中类与继承等概念
    C# 中的函数与方法
  • 原文地址:https://www.cnblogs.com/Michelle20180227/p/8663011.html
Copyright © 2011-2022 走看看