JavaScript变量声明var、let、const

在学习JavaScript中是很少离开变量的,在JavaScript这门语言中目前(包括ES6新增)提供了我们熟知的四种方法声明变量,var、function、let、const。这里专注于讲var、let、const(如有空缺,后期补充)。

首先在初识JavaScript时,(至少我是)使用var来声明变量,这里声明一个变量str。

        //这里我们声明一个变量str
        var str = 'string';

1. 使用var声明时有变量提升,会将变量提升至赋值之上类似于:

        //使用var进行声明时会有变量提升
        var str;
        str = 'string';

2. 而且使用var时是不具备块级作用域的(JavaScript三种作用域:全局作用域[window],局部作用域[函数],块级作用域[例如流程语句的代码块{}])。

        //var 不存在块级作用域
        if(true) {
           var str = 'string';
        };
        console.log(str);

在控制台中输出为string。

3. 不存在死区(因为有变量提升)

        a = 1; //此时a处于全局作用域下
        console.log(window);
        var a;
        console.log(a);

这里打印window展开发现变量a是处于window全局作用域下,当我们var a时并不会影响到上面的赋值,而是自动将变量a提升至赋值上面,故a不为undefined也不会死区。

但在认识ES6后,对声明变量有了更详细的认知,于是认识了let和const(常量)。

let声明变量具有块级作用域和不具备自动提升(可以手动提升)变量(至少官方如此说明)的特点,下面用一段代码演示一下。

        {
            let str = 'string'; //在块级作用域里用let声明变量
        }

        console.log(str);

1. 这里会报错提示str未定义,由此证明let具备块级作用域。

2. 所有能使用var的地方都能使用let:

        let a;
        {
            {
            a = 5;
            }
        }
        console.log(a);

 这里a在控制台输出为5,由此证明let可以手动提升作用域,比var更加严谨和优化。

3.在for等流程控制语句中存在两个不同的块级作用域:

        for(let i = 0; i < 9; i++) {
            let i;
        };

这样写并没有报错,根据在同一作用域下let声明的变量名不能重复的特点,可以得出for()为一个块级作用域,后面的{}为一个块级作用域。

1. const常量,常量的特性和let相似(存在块级作用域,不存在变量提升等等)但只是部分特性一样但它必须赋值。

        const PI;

这样会报错,由此可知const必须赋值。

2. const的命名规范,往往采用大写字母,蛇形命名这种规范(非必须),算行内规范。

        //蛇形命名
        const MAX_VALUE = 10;

3. 不可变性

        //不能使用等号赋值
        const MAX_VALUE = 10;
        MAX_VALUE = 20;
        console.log(MAX_VALUE);

这里会报错,所以常量声明赋值后不能以等号改变赋值。

4.声明对象数组内的成员可以更改

        const ARR = [ 'a', 'b', 'c'];
        ARR[0] = 'c';
        console.log(ARR);//['c', 'b', 'c']

这样是可以更改常量数组里的成员的,但仅限于成员,它本身仍然是不可变的。

今天的总结就到这里,如果在文章中发现bug,欢迎大家可以在评论区及时指出来,谢谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值