01ES6学习——let和var的区别

01ES6学习——let和var的区别

前言

在 es6 新增 let 命令之前,我们都是使用 var 来定义我们的变量的,接下来让我们来看看 let 和 var 在定义变量的时候有什么不同之处吧!

1.作用域不同
1.1我们在 let 命令出现之前,js 的作用域只有函数作用域和全局作用域

(1)使用 var 来定义变量:
在这里插入图片描述
(2)使用 let 来定义变量
在这里插入图片描述
从上面的两张图我们可以看出 let 命令定义的变量有了块级作用域的概念,即在花括号的外部我们无法获取花括号内部由 let 定义的变量。
(1)var 定义的变量类似于全局变量;
(2) let 定义的变量类似于局部变量。

1.2 let 命令 很适合用来定义 for 循环的计数器

for 循环有一个特别之处:
(1)设置循环变量的那一部分是一个父作用域
(2)循环体内部是一个单独的子作用域
在这里插入图片描述
由上图输出的三次’abc’ 可以看出,函数内部的变量 i 和循环变量 i 不在同一个作用域,而是各自有单独的作用域。

1.3javascript 语言的特殊之处就在于:

(1)函数内部可以直接读取全局变量
(2)函数外部无法读取函数内部的局部变量

2.变量提升问题
变量提升现象:即变量可以在声明之前使用,值为 undefined 。

(1)使用 var 的情况:

(2)使用 let 的情况
在这里插入图片描述

总结:

(1)使用 var 来定义的变量会发生变量提升,即脚本开始运行的时候,i 就已经存在了,但是还没有值,所以输出了 undefined
(2)使用 let 来定义的变量不会发生变量提升。则在声明它之前,变量是不存在的,这时如果用到他,就会抛出错误。

3.暂时性死区问题
暂时性死区:在代码块内,使用 let 命令声明变量之前,该变量都是不可用的。

只要块级作用域内存在 let 命令声明的变量,则它所声明的变量已经 ”绑定“ 了这个区域了,不再受外部的影响
在这里插入图片描述

如果一个变量根本没有被声明,typeof 不会报错,而是输出undefined。在没有 let 命令之前是一个百分百安全的操作。
在这里插入图片描述

在有了 let 命令来定义变量之后,typeof不再是一个百分百安全的操作了
在这里插入图片描述

4.重复声明问题
4.1.1 let 不允许在相同作用域内重复声明同一个变量

在这里插入图片描述

4.1.2 let 不允许在函数内部重新声明参数

在这里插入图片描述

4.2.1 var 允许在相同作用域内重复声明同一个变量

在这里插入图片描述

4.2.1 var 允许在函数内部重新声明参数

在这里插入图片描述

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值