详解ES6之let与const的特性_与var的区别

什么是ES6?

ES的全称是ECMAScript,是由ECMA国际标准化组织制定的一项脚本语言的标准化规范。js就是基于ES标准创建的语言。
ES6泛指2015年之后发行的版本。

为何要学习ES6?

  • 变量提升增加程序运行的不可预测性
  • 语法过于松散

ES6新增的语法

let

ES6中新增的用来声明变量的。

  • let声明的变量只在所处的块级有效,也就是说js新增块级作用域。块级作用域即是在一个大括号里面。
    (ES6之前,js中只有全局作用域和局部作用域)
    if(true){ let a = 10; }
    console.log(a) // a is not defined

  • 可以防止内层变量覆盖外层变量

  • 防止循环遍量变成全局变量,如for循环中的计数器

  • 不存在变量提升 只能先声明再使用

console.log(a)  //undefined
let a = 1;
  • 使用let关键字声明的变量具有暂时性死区特性(绑定,内部与外部无关系)
var num1 = 100;
var num = 10;
    if(true){
        console.log(num);   //10,可以访问外部的var num
        console.log(num1);	//Cannot access 'num1' before initialization
        let num1 = 20;     //let关键字将num1这个变量与这个大括号的块域进行绑定
    }
经典题目
题目一

在这里插入图片描述

在这里插入图片描述

  1. 在此题中,数组arr[0]和arr[1]的内容都是一个函数,函数的内容为打印出i的值。
  2. 执行for循环时,只是将函数赋值给数组,并没有执行函数。
  3. 执行完循环之后,执行下面的arr0;实际上这是在调用arr[0]里面的函数,通过在函数后面加括号。
  4. 此时要输出i,但是在function里面并没有对i的声明,所以向上级作用域查找,发现有var定义的全局i。由于循环早已退出,此时i的值为2,所以输出两个2.
题目二

在这里插入图片描述
1.由于有let i,每个i都是不同的变量,所以每次循环时都创建一个新的块级作用域。
2.循环结束后,由于函数内部没有i,所以去上一级作用域(也就是循环产生的块级作用域)查找i。

在这里插入图片描述

const

声明常量,值(内存地址)不能变

  • 具有块级作用域
  • 声明常量必须赋值
  • 赋值后,值不能修改
    分为两种情况:基本数据类型的常量值不能修改;
    复杂数据结构里面的值可以改,但是整个结构不可以直接赋值。
    例:
    如图所示,arr[0]可以修改成功,是因为它没有改变数组arr的内存地址。
    而arr = [‘a’,‘b’];就不行,因为新的数组会修改arr的内存地址
    在这里插入图片描述

var、let、const的区别

在这里插入图片描述
如果要存储的数据不变化,用const。js效率更高,不要实时监控它的改变。

参考学习

b站黑马程序员教程资源

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值