编写module.exports函数有什么不同?

时间:2018-05-22 03:05:39

标签: javascript node.js express ecmascript-6 ecmascript-2017

我看到编码器编写module.exports函数的方式不同。

第一

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

  })()
}

第二名:

module.exports = async () => {

}

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

在第一种方式中,需要在已定义的函数中返回async ()函数。 在第二种方式中,我们没有像第一种方式那样调用函数。

任何人都可以帮助我理解这个概念。 我是Javascript

的新手

2 个答案:

答案 0 :(得分:0)

Snippet 1是使用IIFE的常规功能,而代码段2是箭头功能。两者都是返回promise的函数,因为async是承诺返回函数的语法糖。

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

在ES6中使用IIFE不太合理,因为有块范围的变量可以防止泄漏。这里没有证明代码片段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的行为有所不同。可以绑定代码段1中的函数,使用arguments等,而代码段2中的函数则不能。

Snippet 2通常是一种更好的方式。

答案 1 :(得分:0)

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

最重要的是, module.exports 函数是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,但它是一个非常好的资源。

祝你好运!