ES6块级作用域

1. ES5只有全局作用域和函数作用域导致

(1)内层变量可能会覆盖外层变量

(2)用来计数的循环变量会泄露为全局变量

 ES5中也可以用闭包实现块级作用域

    ES6中新增了块级作用域(由大括号包裹,比如:if(){},for(){}等)

2.(1)var声明的变量存在变量提升 let和const不存在变量提升

        (2)var允许重复声明变量。let和const在同一作用域不允许重复声明变量。

     (3)var和let 可以修改变量,const声明一个只读的常量,声明后常量的值不可以改变,意味着const一旦声明变量,就必须立即初始化,不能留到以后赋值。const所说的一旦声明值就不能改变,实际上指的是:变量指向的那个内存地址所保存的数据不得改动。

        (3)let和const存在暂时性死区。即只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。

在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。

暂时性死区的本质就是:只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容