let 关键字的特点
前言🛴
let 语句声明一个块级作用域的本地变量,并且可选的将其初始化为一个值。
let
是 ES6 新增的用于声明变量的关键字,用自己的话说,它的出现主要是用来替代 var 关键字的,那使用 let 声明的变量有什么特点呢?🍗
特点🥂
let 声明的变量只在所处于的块级作用域有效
不存在变量提升
有暂时性死区
块级作用域🧐
块级作用域,就是使用了大括号后产生的作用域,我们来看下面这个代码
都在同一个大括号内,在同一块级作用域,可以正常打印;那如果打印和变量不在同一个大括号内,会正常打印吗?🍱
这里将 console.log(a)放在了 if 语句外,而 a 是在 if 语句中定义的,不在同一作用域内,打印的结果为 a is not defined
注意: 使用let
关键字声明的变量才有块级作用域,使用var
声明的变量不具备块级作用域特性
好处🪐
防止循环变量变成全局变量
当我们在用 var 做循环时,循环变量 i 在结束循环后依然能访问;但当我们改成 let 后,结束循环后就访问不到了
不存在变量提升🙌
在 ES6 之前,变量可以先使用再声明,存在变量提升。而使用let
关键字就不会出现这种情况了,必须先是声明再使用,否则就会报错。
暂时性死区😮
先看下面的这串代码
正常打印,结果是 10。
问题来了
—— 那如果我在 if 语句中用 let 关键字再定义一个 num 后,还会正常打印吗?🤷♂️
这就是 let 的暂时性死区。当作用域内存在用 let 关键字定义的同名变量时,console.log(num) 不会再到此块级作用域外去寻找变量,而作用域内的 num 是在其后面定义的,就会出现这种情况,无法正常运行。
版权声明: 本文为 InfoQ 作者【bo】的原创文章。
原文链接:【http://xie.infoq.cn/article/36176bf0ad6eb61e2063833a3】。文章转载请联系作者。
评论