我知道,拥有自执行函数是浏览器中 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;
};
})();
最佳答案
您在第二个代码块中显示的常规自执行函数表达式在 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()
进行解析时,会执行此包装器函数。
关于javascript - 在nodejs模块中自执行函数被认为是一个好的实践吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51448475/