【问题标题】:Should every function be a closure?每个函数都应该是闭包吗?
【发布时间】:2015-08-07 13:20:30
【问题描述】:

由于闭包和稍后调用具有封闭变量的函数的能力似乎是 javascript 功能的一大优势,我发现自己经常使用以下构造:

var func;
func = function (args) {return function (moreArgs) {
    Do something;
};};

这是正常的 javascript 编程还是以这种方式实现所有功能存在问题/陷阱?我没有看到任何缺点,而且这种模式总是设置一个具有闭包潜在好处的函数......能够传递它并在以后执行它。

当需要闭包时,可以这样调用两次:

func()(parms);

...但这种情况很少见。

这似乎在任何情况下都可以正常工作。这是应该在 Javascript 中设置函数的方式还是过度使用闭包?这种方法似乎没有任何实质性的缺点。

【问题讨论】:

  • 不确定我是否会像那样编写 every 函数,但是模块化模式将具有相似关注点的函数放入一个闭包中,因此它们有效地拥有自己的一组伪全局变量很常见。
  • 整个想法被称为“柯里化”

标签: javascript node.js function closures


【解决方案1】:

您正在尝试做的事情,有点像 function currying。但又是“有点”这个词。 This 指导如何正确操作,以防您感兴趣。

尽量在需要的时候使用闭包。因为如果你不知道自己在做什么,闭包会导致严重的内存泄漏。 google optimization

创建闭包比创建没有闭包的内部函数要慢得多,而且比重用静态函数要慢得多

【讨论】:

【解决方案2】:

当我不需要闭包时,我只需像这样调用它两次:

func()(parms);

你有理由不这样做。大多数时候这是不必要的,而且通常是非常规的。坚持基础,这样你的代码本身就不是一个奇怪的岛屿。并不是说这种模式永远不合适——确实如此——但绝对不要无缘无故地一直这样做。

【讨论】:

  • 加上每个闭包都会消耗一些内存,所以如果这样做没有必要或没有好处,那么这样做是没有意义的。
猜你喜欢
  • 2019-03-21
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 2019-08-15
相关资源
最近更新 更多