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

标签 javascript ecmascript-6

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

{    
const firstVar;

class firstClass {}

class secondClass {}    
}

这是为了创建 block 作用域并保持全局 namespace 的清洁吗?例如,它是否相当于将整个 javascript 模块包装在一个自调用函数中?

以这个JS文件为例;

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

最佳答案

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

由于constlet block 作用域,而不是词法(或函数)作用域,您不需要创建一个完整的函数并调用它。只需将其包装在一个 block 中就足够了。

{
  const foo = 42;
  console.log(foo); // 42
}
console.log(foo); // ReferenceError

值得注意的是,与 IIFE 相比,这种做法仍然较少使用(也没有那么强大),因为 IIFE 还可以防止泄漏 varfunction 声明,哪个街区不会。虽然今天的常见用例是使用模块,这将隐式地防止将变量和对象泄漏到全局范围内。

只有 letconstclass 是 block 作用域的。

关于javascript - 在 ES6 中将整个 JS 代码块包装在 {} 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53613456/

相关文章:

javascript - 如何更新谷歌地图标记位置?

javascript - 检查文件或模块是否已导入

javascript - 无需转译的 SystemJS 导入

javascript - `Symbol.iterator` 产生对象的值

reactjs - 导入 4 个文件夹深的文件

javascript - 使用 JS 或 CSS 一次加载所有背景图像?

javascript - 如何使用javascript在输入文本框中设置日期自动格式

javascript - 使用 document.querySelectorAll 通过 CasperJS 获取 textContent

javascript - ajax 调用本地自定义 JSON 文件以使用 JS 创建 Bootstrap 4 卡?

javascript - Es6 React 组件引用