视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
ECMAScript6块级作用域及新变量声明(let)_javascript技巧
2020-11-27 21:39:17 责编:小采
文档


很多语言中都有块级作用域,但JS没有,它使用var声明变量,以function来划分作用域,大括号“{}” 却限定不了var的作用域。用var声明的变量具有变量提升(declaration hoisting)的效果。

ES6里增加了一个let,可以在{}, if, for里声明。用法同var,但作用域限定在块级,let声明的变量不存在变量提升。

示例1: 块级作用域 if



变量val在if块里声明的,但在else块和if外都可以访问到val。

把var换成let,就变成这样了



示例2: 块级作用域 for



变量i在for块里声明的,但在for外也能访问到。

把var换成let,for外就访问不了i



示例3: 变量提升(先使用后声明)



变量val先使用后声明,输出undefined,也不报错。

把var换成let,就报错了



示例4: 变量提升(先判断后声明)



使用typeof判断时也可以再var语句的前面

但把var换成let,if处报语法错



ES6规定,如果代码块中存在let,这个区块从一开始就形成了封闭作用域。凡是在声明之前就使用,就会报错。即在代码块内,在let声明之前使用变量都是不可用的。语法上有个术语叫“暂时性死区”(temporal dead zone),简称TDZ。当然TDZ并没有出现在ES规范里,它只是用来形象的描述。

let的注意事项

1. 不能重复声明



执行时报语法错

2. 有了let后,匿名函数自执行就可以去掉了



以上所述就是本文的全部内容了,希望大家能够喜欢。

下载本文
显示全文
专题