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实现中使用的编程技术.最终,既不是不可能也不是必须这样实现它.
由于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.这意味着不仅执行一个函数,而且可能在完全不同的上下文中执行.
| 归档时间: |
|
| 查看次数: |
5440 次 |
| 最近记录: |