编写 module.exports 函数有啥区别? [复制]

Posted

技术标签:

【中文标题】编写 module.exports 函数有啥区别? [复制]【英文标题】:What is the difference in writing a module.exports function? [duplicate]编写 module.exports 函数有什么区别? [复制] 【发布时间】:2018-10-31 17:17:57 【问题描述】:

我看到程序员编写 module.exports 函数的不同方式。

第一个:

module.exports = function() 
  return (async () => 

  )()

第二个:

module.exports = async () => 


第一种方式和第二种方式有什么区别?

在第一种方式中,在已经定义的函数中返回 async () 函数的需要是什么。 在第二种方式中,我们不会像第一种方式那样调用函数。

谁能帮我理解这个概念。 我对javascript很陌生

【问题讨论】:

第一个返回一个 Promise,它是调用异步函数的结果。第二个返回一个(未调用的)异步函数。 【参考方案1】:

片段 1 是使用 IIFE 的常规函数​​,而 sn-p 2 是箭头函数。两者都是返回承诺的函数,因为async 是承诺返回函数的语法糖。

IIFE 通常用于防止`变量泄漏到全局范围。这在 Node 中不是问题,因为代码是在模块范围内执行的。

在 ES6 中使用 IIFE 不太合理,因为存在块范围的变量来防止泄漏。 sn-p 1 中的 IIFE 在这里不合理,因为函数范围已经存在:

var foo; // not a probem; it pollutes module namespace but doesn't leak anywhere
module.exports = function() 
  var foo; // can have another foo here, but it could be defined inside async
  return (async () => /*...*/)()

由于常规函数和箭头函数之间的差异,代码段 1 和 2 的行为有所不同。 sn-p 1中的函数可以绑定,使用arguments等,而sn-p 2中的函数则不能。

片段 2 通常是一种更可取的方式。

【讨论】:

【参考方案2】:

这绝不是一个完整的答案,因为完整的答案需要太多的细节。这应该是一个评论,但它仍然太长了。希望这足以让您开始自己进行研究。

需要注意的最重要的一点是,module.exportsfunctions 是 javascript 中不直接相互关联的两个概念。

module.exports 是一种声明文件中的某些内容在导入另一个文件时可访问的方式。它不一定是函数。

module.exports = ""; //exports a string
module.exports = name:"john"; //exports an object
module.exports = 3.14159; //exports a number

函数是javascript中众多“事物”中的一部分。从广义上讲,他们的目的是拿一些东西并用它做一些事情。主要有两种形式:

function()  

()=>

您可以在此处详细了解这两种形式的区别:http://2ality.com/2012/04/arrow-functions.html

还有异步函数,这些函数前面带有关键字“async”,允许在后台进行处理。您可以在此处了解有关异步函数的更多信息:http://2ality.com/2016/02/async-functions.html。

我不隶属于 2ality.com,但它是一个非常好的资源。

祝你好运!

【讨论】:

以上是关于编写 module.exports 函数有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

module.exports与exports区别

有啥办法可以做到,所以我不必重新声明 module.exports 的依赖项?

node exports 与 module.exports 的区别及使用详解

node.js模块中exports和module.exports的区别

Node.js中exports与module.exports的区别

exports和module.exports的区别