mfc中报错未声明的标识符_ES6 中的 let 和 const 两种声明方式【02】

本文介绍了ES6中的let和const声明方式,对比了它们与var的区别。let提供块级作用域,无变量提升,适合局部变量;const用于声明不可变的常量,需立即赋值。在循环中,let避免了var造成的干扰,并在临时死区内阻止变量使用。
摘要由CSDN通过智能技术生成

2f51711dd7f6dff94930d1eced5dab4f.gif

学习要点: 

1.let 声明 

2.const 声明

本节课我们来开始学习 ES6 中的 let 和 const 两种声明方式。

一.let 声明

1. ES6 新增了一个新的变量声明:let,它和 var 变量声明非常的类似;

2. 首先创建一个块级区域,分别使用 let 和 var 声明一个变量;

{    var value=10;    let count=20;}console.log(value); //10console.log(count); //引用错误

c747a6f6297af9f2ec76afea6bb53874.png

3. 上述例子直观表现为:1.var 出了块级区域有效;2.let 出了块级区域无效;

4. var 声明具有变量提升能力,不管在哪里声明,均视为作用域顶部声明; 

5. let 声明不具备变量提升能力,离开区块的作用域后,则变量立刻失效; 

6. 那么,哪种更好?let 更适合局部变量,非常容易掌控且不会导致凌乱; 

7. 变量提升能力还带来一个区别,就是声明之前使用时,产生的结果不同; 

8. 下面例子对比中,var 在后面声明,前面输出的值从逻辑上较为怪异; 

9. undefined 表示变量声明了,只是没有赋值,按理说顺序要在前面; 

10. 而 let 声明方式,就算在后面声明,前面的输出依然是引用错误;

console.log(value);var value=10; //undefinedconsole.log(count) //引用错误let count=20;

11b96d211c9c3c71ffd2322635677b88.png

11. 在一个区块内部,只要使用 let 声明,这个区域就形成了封闭的作用域; 

12. 如果在 let 声明前使用变量,这段区域被称为“临时死区(或暂时性死区)”;

if(true){    //死区开始    value=10;    console.log(value); //引用错误    //死区结束        let value;}

735c8eaec61752787e733cf4002876a1.png

13. “临时死区”简称:TDZ,这段区域使用 typeof 也会报错;

14. 一般情况下,typeof 来判断未声明的变量,只会输出 undefined;

console.log(typeof value); //引用错误let value;

7e0c4847aa755c941a1bf1534bb6f8f3.png

15. var 声明可以重复声明同一个变量,后面会取代前一个变量; 

var value=10;var value=20;console.log(value); //20
let count=10;let count=20;console.log(count); //提示 语法错误

ca4079731723cd5a0ccc48913d0d2732.png

16. let 声明不可以重复声明一个变量,会直接报错,就算其中一个是 var;

val value=10;  //两个 let 报错,let 和 var 各一个也报错let value=20;  //报错,更换顺序报错console.log(value);

66de72b98fbbfd401d44dee55041a964.png

17. 当然,如果一个在作用域外部,一个在作用域内部,则可以并存;

var value=10;{    let value=20;    console.log(value); //20}console.log(value); //10

d4c7574cfa096ef72cfcc968678f63d8.png

18. 在循环中,var 和 let 的区别尤为明显,let 只在循环内部有效; 

for(var i=1; i<=10; i++){   console.log(i); //1,2,3,4,5,6,7,8,9,10}console.log(i); //11

139cbb9272051de0741eb5b37109db44.png

19. var 全局有效,导致后续再使用 i 会引起干扰,而 let 则不会;

for(let j=1; j<=10; j++){   console.log(j); //1,2,3,4,5,6,7,8,9,10}console.log(j); //引用错误

825a6c90f1e07807e215235ce2c7fd1c.png

20. 如果在循环体内设置函数方法,体外输出 var 会得到不想要的值;

var list=[];for(var i=1; i<10; i++){    list[i]=function(){        console.log(i);    }}list[5]; //这里不管设置多少,结果都是 10
var list=[];for(let i=1; i<10; i++){    list[i]=function(){        console.log(i);    }}list[8](); //8

84e72760dc4e355247ee56e5dbbc34a2.png

08d456d24515746fab2751e16306d9a9.png

二.const 声明 

1. const 声明的作用是:创建一个只读的常量,一旦声明不可改变; 

2. 和 let 声明一样,const 声明的常量无法提升,也存在临时死区; 

3. 和 let 不同的是,const 声明后必须立刻赋值,否则会报错;

const NAME; //声明常量必须紧随赋值
const NAME='Mr.ren';console.log(NAME); // Mr.re
const NAME='Mr.ren';const NAME='Mr.hai'console.log(NAME); //报错:常量只能声明一次,不能重写
console.log(NAME); //死区 引用错误const NAME='renhaibo';

常量名统一建议为大写

知识点多敲多练多看运行结果

如果您觉得有用,记得在下方点赞、关注、留言,小编会定期奉 上更多的惊喜哦,您的打赏支持才是小编继续努力的动力,么么哒。

每日分享在学习过程中总结的学习经验,学习笔记,笔试题,HTML,CSS,JavaScript,jQuery教程,Vue教程,PHP教程,TinkPHP教程等,望大家能以学习为目的,每天阅读一篇文章,了解身边的技术,陪有梦想的人一起成长!

cbd905918f33282749945a58f52ddf47.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值