我知道,具有自执行功能是在浏览器中使用JavaScript的一种好习惯,以避免变量范围问题。
但是,我想知道,nodejs模块中是否仍需要自执行功能?还是不再满足可变范围的目的?
例如
const puppeteer = require('puppeteer');
module.exports = async (url, width, height, path) => {
...
return screenshot;
};
const puppeteer = require('puppeteer');
(function () {
module.exports = async (url, width, height, path) => {
...
return screenshot;
};
})();
答案 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()
进行解析。