javascript - 在nodejs模块中自执行函数被认为是一个好的实践吗?

标签 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;
  };
})();

最佳答案

您在第二个代码块中显示的常规自执行函数表达式在 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/

相关文章:

javascript - 使用Jquery替换第n个字符后的所有字符

javascript - 如何编写一个简单的计数 if 脚本

javascript - 为什么 Gulp 无法在更改时自动重新处理我的 JS?

node.js - 从嵌套回调而不是父函数返回值

node.js - 使用 HTTP 基本身份验证保护 API

javascript - 任何用于实现像 Google Stories 这样的可滚动照片墙的库?

node.js - 我是否必须使用 Meteor 在每个文件中导入 npm 包并在每个文件中设置选项?

javascript - 在非系统驱动器上运行 NodeJS

javascript - 使用套接字优雅地处理 fork 进程中未捕获的异常

java - 无法使用对象数组显示表格,以便我能够使用 DT_RowId 标记行