将整个代码块包装在两个花括号中有什么意义?例如在.js文件中:
{
const firstVar;
class firstClass {}
class secondClass {}
}
这是为了创建一个区块链并保持全局名称空间整洁吗?例如,它是否可以与将整个javascript模块包装在自调用函数中相媲美?
以这个JS文件为例;
https://github.com/codrops/PageFlipLayout/blob/master/js/demo.js
答案 0 :(得分:2)
是的,它与创建IIFE来将变量与全局范围隔离的旧做法非常相似。
由于let
和{
const foo = 42;
console.log(foo); // 42
}
console.log(foo); // ReferenceError
的范围是 block ,而不是 lexical (或函数),因此您无需创建整个函数并调用它。只需将其包装在一个块中即可。
var
值得注意的是,这种做法仍比IIFE少使用(且功能较弱),因为IIFE还可以保护您避免泄漏function
和let
声明,而这不会阻塞。尽管当今常见的用例是使用模块,但这将隐式防止将变量和对象泄漏到全局范围内。
只有const
,class
和<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css" rel="stylesheet">
处于块范围内。