编写 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.exports 和 functions 是 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 的依赖项?
node exports 与 module.exports 的区别及使用详解
node.js模块中exports和module.exports的区别