在ES6中的{}内包装整个JS代码块

时间:2018-12-04 12:52:15

标签: javascript ecmascript-6

将整个代码块包装在两个花括号中有什么意义?例如在.js文件中:

{    
const firstVar;

class firstClass {}

class secondClass {}    
}

这是为了创建一个区块链并保持全局名称空间整洁吗?例如,它是否可以与将整个javascript模块包装在自调用函数中相媲美?

以这个JS文件为例;

https://github.com/codrops/PageFlipLayout/blob/master/js/demo.js

1 个答案:

答案 0 :(得分:2)

是的,它与创建IIFE来将变量与全局范围隔离的旧做法非常相似。

由于let{ const foo = 42; console.log(foo); // 42 } console.log(foo); // ReferenceError 的范围是 block ,而不是 lexical (或函数),因此您无需创建整个函数并调用它。只需将其包装在一个块中即可。

var

值得注意的是,这种做法仍比IIFE少使用(且功能较弱),因为IIFE还可以保护您避免泄漏functionlet声明,而这不会阻塞。尽管当今常见的用例是使用模块,但这将隐式防止将变量和对象泄漏到全局范围内。

只有constclass<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css" rel="stylesheet"> 处于块范围内。