闭包
这就是我对闭包的理解:将函数分配给变量并在不同的环境中重用它。
这不是对闭包的严格准确定义。
闭包是可以访问引用环境的函数。在 Javascript 中,这意味着一个函数由另一个函数返回并且可以访问原始函数范围。还有其他一些问题很好地描述了这一点
闭包是可以以多种方式使用的通用结构。它们最大的好处之一是它们保护私有范围,这就是为什么像 jQuery 这样的库经常被写成闭包,这样它们就不需要在全局范围内公开它们的所有函数。
承诺
承诺是一个不同的概念。它们是一种结构化异步代码的方式,可以更容易地遵循流程。特别是 Promise 对象是一个对象,它以清晰易读的方式提供链接操作的功能。一个promise可以使用闭包来实现,但不是必须的。例如,这是一个不使用闭包的实现:
https://gist.github.com/814052/690a6b41dc8445479676b347f1ed49f4fd0b1637
而 jQuery 的实现至少使用了一个闭包,但并不是真正基于它们
http://james.padolsey.com/jquery/#v=1.10.2&fn=jQuery.Deferred
结论
Promise 和 Closures 不是直接相关的概念。闭包是一种可以在 Promise 实现中使用的编程技术。最后,这样实现它既不是不可能也不是必要的。