在执行模块的代码之前,Node.js 将使用如下所示的函数包装器来包装它

    1. (function(exports, require, module, __filename, __dirname) {
    2. // Module code actually lives in here
    3. });

    通过这样做,Node.js 实现了一些目标:

    • 它将顶级变量(使用 、 或 定义var)const保持let在模块而不是全局对象的范围内。
    • 它有助于提供一些实际上特定于模块的全局变量,例如:
      • 实现者可以用来从模块中导出值的module和对象。exports
      • 便利变量__filenameand __dirname,包含模块的绝对文件名和目录路径。