let和const关键字使用方法

在我们初学javaScript时使用var来声明变量,但是使用var声明变量会遇到变量提升等问题,而且只有全局作用域和函数作用域这种蛋疼的问题。于是在2015年ECMA组织发布了es6,带来了新的声明变量的关键字。

let关键字

1. let声明的变量 只在let所在的代码块起作用,形成块级作用域

之前我们使用var在if语句或者for语句声明变量时,在if外面的作用域也可以访问到,而使用let声明的变量会形成块级作用域,只在声明的花括号{}内部有效。

if (true) {
       let num = 12;
}
console.log(num);

最后的结果会报错:

报错:ReferenceError: num is not defined

引用错误 num未被定义

2.使用let声明的变量,可以重新赋值,但是不能重新声明

使用var声明的变量,var a=12;再接着var a=5;
而let声明的变量不可以。

        var sw = 8;
        sw = 9;
        console.log(sw);
        var sw = 10;
        console.log(sw);
        let num = 13;
        num = 14;
        console.log(num);
        let num = 15;
        console.log(num);

最后的结果也会报错:

报错:SyntaxError: Identifier ‘num’ has already been declared

语法错误 标识符num已经被声明过了

3.let声明的变量 不会变量提升 必须在声明并且赋值之后才能使用

学过作用域,作用域链就知道在进行预编译的时候会被提前存到GO或者AO里值为undefined。所以就算你在变量之前打印该变量也可以打印出undefined

  console.log(sw);
        var sw=5;
        console.log(num);
        let num=10; 

最后的结果
undefined和报错

报错:ReferenceError: Cannot access ‘num’ before initialization

引用错误 不能在num初始化之前访问

4.暂时性死区

虽然这东西可以和第三点一起说,但是还是单独拿出来提一嘴。
直接看例子:

   if(true){
            console.log(typeof num);
            console.log(typeof sw);
            let sw=12;
        }

不知道大伙平时有没有注意到一点。typeof一个你没有声明的变量,他会默认输出undefined(算是默认这个变量存在)。
这个最后的结果也是
undefined和报错

报错:ReferenceError: Cannot access ‘sw’ before initialization

和第三点一样都是 引用错误 不能在num初始化之前访问

5. 在全局作用域内使用let声明的变量 但是不属于全局对象的属性

在全局作用域声明的变量可以window打点找到他,而let声明过得变量不行

var num=5;
console.log(window.num);
 let sw=12;
 console.log(window.sw);

最后的结果
5和undefined

const声明常量

const就是声明一个只读的常量 一旦声明之后 他的值就不能再改变。
而且在平时使用中建议大伙,声明的常量使用大写字母如:const NUM=12;

先说第一点:

1.一旦声明之后 常量的值就不能再改变(声明过后 不允许改变内部存储的地址)

const NUM = 12;
        NUM = 13;
        console.log(NUM)

然后理所当然报错了:

报错: TypeError: Assignment to constant variable.

类型错误 ,给一个常量赋值

2.声明之后必须赋值

直接看例子:

const NUM ;
        NUM = 13;
        console.log(NUM)

一样,也报错了:

报错: SyntaxError: Missing initializer in const declaration

语法样式 常量声明没有初始化

3.和let一样会形成块级作用域, 只在const所在的代码块起作用

if (true) {
 const NUM = 5;
}
console.log(NUM);

ReferenceError: NUM is not defined

引用错误 num未被定义

4.跟let一样 不能重复声明 不能声明提前

这我就不举例了可以把上面let的例子换成const测试一下。


案例

let和const还是挺有用的,比如之前有个很经典的问题?

for(var i = 0; i < 10; i++) {
            setTimeout(function() {
                console.log(i);
            },1000)
        }

最后打印十个10,如果我们想让他从0-9打印只需要把for里的i换成let来声明,就可以了。

(如果这篇文章有什么问题请及时联系我!)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值