黑马程序员技术交流社区

标题: 【南京校区】JS中var、let、const三者的区别 [打印本页]

作者: 大蓝鲸小蟀锅    时间: 2020-4-25 00:38
标题: 【南京校区】JS中var、let、const三者的区别
    // 1. var 作用是定义变量,声明时可以不赋值,可以在声明变量之前使用,但是没有块级作用域
    // 2. let 作用是定义变量,声明时可以不赋值,不可以在声明变量之前使用,但是有块级作用域
    // 3. const 作用是定义常量,声明时必须赋值,不允许重新赋值,不可以在声明常量之前使用,但是有块级作用域

    // 声明时是否可以不赋值
    var a;  //不报错  声明时可以不赋值
    let b;  //不报错  声明时可以不赋值
    const c;  //报错  声明时必须赋值

    // 声明之前打印
    console.log(a1);  // 不报错 可以在声明变量之前使用
    console.log(b1);  // 报错 不可以在声明变量之前使用
    console.log(c1);  // 报错 不可以在声明常量之前使用
    var a1 = 'a1';
    let b1 = 'b1';
    const c1 = 'c1';

    // 块级作用域
    {
    var a2 = 'a2';
    let b2 = 'b2';
    const c2 = 'c2';
    }
    console.log(a2); // 不报错,没有块级作用域
    console.log(b2); // 报错,有块级作用域
    console.log(c2); // 报错,有块级作用域

    // 是否可以重新赋值
    var a3 = 'a3';
    let b3 = 'b3';
    const c3 = 'c3';
    a3 = 'a33'; // 不报错,允许重新赋值
    b3 = 'b33'; // 不报错,允许重新赋值
    c3 = 'c33'; // 报错,不允许重新赋值

    // 关于const常量重新赋值的问题,做一个特别说明
    // 不允许给常量重新赋值,但是当const常量保存的是一个复杂数据类型时
    // const不允许修改的是栈中的内容,但可以修改堆中的内容
    const c4 = { name: 'c4' };
    const c5 = { name: 'c5' };
    c4 = { name: 'c4' };  //报错,const常量不允许重新赋值,重新赋值栈中的内容就会发生变化
    c5.name = 'c5';       //不报错,对const常量的操作,只涉及堆的修改,不涉及栈的修改,是被允许的,所以不会报错





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2