在功能块中包装JavaScript源文件的整个内容的意义和原因是什么?

What is the significance of, and reason for, wrapping the entire content of a JavaScript source file in a function block?

本问题已经有最佳答案,请猛点这里访问。

将JavaScript源文件的整个内容包装在功能块中有什么意义?


通常的做法是将浏览器JavaScript包装在IIFE中,以便将变量保持为私有而不会污染全局范围。

全局变量通常被认为是坏的。 他们鼓励容易出错的模式,并且更难以推理您的程序。

Node.js有一个漂亮的技巧,它实际上代表你自动将你的模块包装在一个函数中。 因此,您几乎不会看到任何人将他们的Node.js代码包装在IIFE中。 虽然您可能仍然看到它使用内联来限定一小部分代码。

由于ES6和块作用域,我们实际上可以通过使用块语句来避免IIFE的轻微开销。

1
2
3
4
5
6
{
    const foo = 1;
    // ... code that you would put in an IIFE ...
    // ... but do NOT use `var` ...
}
console.log(foo);  // ReferenceError: foo is not defined

进一步阅读:

The Joys of Block Scoping with ES6