A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

    // 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常量的操作,只涉及堆的修改,不涉及栈的修改,是被允许的,所以不会报错

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马