在nodejs模块中,自执行函数是否被视为一种好的做法?

时间:2018-07-20 18:29:47

标签: javascript node.js

我知道,具有自执行功能是在浏览器中使用JavaScript的一种好习惯,以避免变量范围问题。

但是,我想知道,nodejs模块中是否仍需要自执行功能?还是不再满足可变范围的目的?

例如

screenshot.js(没有自执行功能)

const puppeteer = require('puppeteer');
module.exports = async (url, width, height, path) => {
  ...
  return screenshot;
};

screenshot.js(具有自动执行功能)

const puppeteer = require('puppeteer');
(function () {
  module.exports = async (url, width, height, path) => {
    ...
    return screenshot;
  };
})();

1 个答案:

答案 0 :(得分:2)

您在第二个代码块中显示的常规自执行函数表达式在node.js模块中没有任何作用,因为node.js模块已经被node.js包装到其自身的函数中,因此它已经具有它是自己独特的功能范围。无需再次包装它以赋予它另一个独特的功能范围。

您可以看到实际的node.js模块包装器here in the doc

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

该包装函数是在模块运行并将模块代码插入此包装之前执行的,然后将代码交给eval()进行解析。