繁体   English   中英

承诺关闭?

[英]Is promise a closure?

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

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

关闭

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

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

闭包是一种可以访问引用环境的函数。 在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实现中使用的编程技术。 最终,既不是不可能也不是必须这样实现它。

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

由于JavaScript的本质,即异步,我们通过语言和运行时提供了很多功能。 首先,jQuery中的Promise虽然不是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 这意味着不仅执行一个函数,而且可能在完全不同的上下文中执行。

闭包和承诺是不同的概念。 闭包是指变量的范围,其中承诺用于“承诺”在异步操作完成时对某事件的行为将发生。 由于Javascript是非阻塞的(不是异步的 - 编辑),它不会等待函数获得响应,如果它需要访问互联网或磁盘,它表示你可以在完成任务后执行一个承诺。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM