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

ksh*_*iya 3 javascript ecmascript-6

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

{    
const firstVar;

class firstClass {}

class secondClass {}    
}
Run Code Online (Sandbox Code Playgroud)

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

例如,看一下这个 JS 文件;

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

Mad*_*iha 5

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

由于constandlet作用域,而不是词法(或函数)作用域,因此您不需要创建整个函数并调用它。只需将其包裹在块中就足够了。

{
  const foo = 42;
  console.log(foo); // 42
}
console.log(foo); // ReferenceError
Run Code Online (Sandbox Code Playgroud)

值得注意的是,这种做法仍然比 IIFE 更少使用(并且功能更弱),因为 IIFE 还可以保护您免受泄漏vars 和function声明的影响,而块则不能。尽管现在常见的用例是使用模块,但这会隐式防止将变量和对象泄漏到全局范围内。

只有let,constclass是块作用域的。