承诺关闭?

For*_*ker 10 javascript closures promise

闭包标签维基页面中,它显示"jQuery本身就是一个大关闭".

但是也承诺关闭?你能解释一下为什么或为什么不解释?这就是我理解闭包的方法:为变量分配一个函数并在不同的环境中重用它.Promise可以做到这一点$.ajax(),但我无法在stackoverflow中找到将promise作为闭包引入的任何地方.也许是因为有像承诺的其他功能$.Deferred(),resolve()以及fail()扩展其功能,而不仅仅是一个简单的函数传递?

Ben*_*ick 14

关闭

这就是我理解闭包的方法:为变量分配一个函数并在不同的环境中重用它.

这不是一个严格准确的闭包定义.

闭包是一种可以访问引用环境的函数.在Javascript中,这意味着由另一个函数返回的函数,并且可以访问原始函数作用域.还有其他SO问题很好地描述了这一点

闭包是可以以各种方式使用的通用结构.它们最大的好处之一是它们保护私有范围,这就是为什么像jQuery这样的库通常被编写为闭包,因此它们不需要在全局公开它们的所有功能.

承诺

承诺是一个不同的概念.它们是构造异步代码的一种方式,可以更容易地遵循流程.特别是promise对象是一个以清晰易读的方式为链操作提供函数的对象.可以使用闭包实现承诺,但不一定如此.例如,这里是一个不使用闭包的实现:

https://gist.github.com/814052/690a6b41dc8445479676b347f1ed49f4fd0b1637

而jQuery的实现使用至少一个闭包,但实际上不是基于它们

http://james.padolsey.com/jquery/#v=1.10.2&fn=jQuery.Deferred

结论

承诺和闭包不是直接相关的概念.Closure是一种可以在Promise实现中使用的编程技术.最终,既不是不可能也不是必须这样实现它.


zzz*_*Bov 6

你不会问一个鸟舍是否是2x4,即使你用它来做它.承诺和封闭也是如此.Promise使用闭包来保留对state,callbacks和其他类似东西的引用.


ars*_*265 5

由于JavaScript的本质,即异步,我们通过语言和运行时提供了很多功能.首先,Promise在jQuery中,虽然它不是jQuery独有的,但它是一个像文档所说的那样的对象observe when all actions of a certain type bound to the collection, queued or not, have finished.这意味着您可以使用此对象知道在一组或一组项目完成某些行为后何时继续.Closure另一方面,现在jQuery并不是唯一的,而是一个JavaScript构造,一个combines two things: a function, and the environment in which that function was created.这意味着不仅执行一个函数,而且可能在完全不同的上下文中执行.