ES6标准中为什么引入块级作用域?

点击右上方红色按钮关注“小郑搞码事”,每天都能学到知识,搞懂一个问题!

众所周知,JavaScript中只一个全局作用域和函数作用域。而自从有了ES6标准之后,便和其它高级语言一样有了块级作用域。那,大家想过为什么新标准会引入块级作用域的概念呢?

今天来简单分析一下,同时发表一下我对这个问题的小小的看法。

如果没有块级作用域,我们在写JavaScript代码时,就会存在很多隐晦的麻烦,极其容易出错。下面我就想到两种情况,如果没有块级作用域,你将需要谨慎对待了。

第一种情况:内层变量可能会覆盖外层变量

ES6标准中为什么引入块级作用域?

上面这段代码,如果没有tmp='hello world'这一行,函数运行时。

输出结果:Sun Apr 29 2018 22:10:28 GMT+0800 (中国标准时间)

现在在内部加上这么一行。输出结果就是undefined。原因在于变量提升,导致内部的tmp变量覆盖了外层的tmp变量。如果有了块级作用域,函数内部的if语句包含的变量将是独立的。关于变量提升不是很清楚的同学,可以参考我之前写的这篇文章:

第二种情况:用来计数的循环变量泄露为全局变量。

ES6标准中为什么引入块级作用域?

上面代码中,变量i只用来控制循环,但是循环结束后,它并没有消失,泄露成了全局变量。

总结:

在新标准中,出现了块级作用域,降低了很多代码风险。


分享到:


相關文章: