Javascript 承诺就是结束吗?

Javascript 承诺就是结束吗?,javascript,closures,promise,Javascript,Closures,Promise,在中,它写道“jQuery本身就是一个大闭包。” 但承诺也是一种终结吗?你能解释一下为什么吗?这就是我对闭包的理解:将一个函数分配给一个变量,并在不同的环境中重用它。Promise是通过$.ajax()实现的,但我在stackoverflow中找不到Promise作为闭包引入的地方。可能是因为promise还有其他一些特性,如$.Deferred()、resolve()、和fail(),可以将其功能扩展到一个简单的函数传递之外?因为JavaScript的本质是异步的,也就是说,语言和运行时提供了

在中,它写道“jQuery本身就是一个大闭包。”


但承诺也是一种终结吗?你能解释一下为什么吗?这就是我对闭包的理解:将一个函数分配给一个变量,并在不同的环境中重用它。Promise是通过
$.ajax()
实现的,但我在stackoverflow中找不到Promise作为闭包引入的地方。可能是因为promise还有其他一些特性,如
$.Deferred()
resolve()
、和
fail()
,可以将其功能扩展到一个简单的函数传递之外?

因为JavaScript的本质是异步的,也就是说,语言和运行时提供了很大的功能。首先,jQuery中的
Promise
,尽管它不是jQuery所独有的,但正如文档所说,它是一个对象。这意味着您可以使用此对象了解在一组或一个项目队列完成某些行为后,何时继续。另一方面,
闭包
并不是jQuery所独有的,而是一个JavaScript构造,一个。这意味着不仅要执行一个函数,而且可能要在完全不同的上下文中执行。

闭包和承诺是不同的概念。闭包是指变量的作用域,其中as-promise用于“承诺”在异步操作上执行某个操作时将发生该操作。由于Javascript是非阻塞的(不是异步的——编辑),如果需要访问internet或磁盘,它不会等待函数得到响应,这意味着在完成某项操作后可以执行一个承诺。

你不会问鸟舍是否是2x4,即使你使用了一个。承诺和关闭也是如此。承诺使用闭包来保留对状态、回调和其他类似内容的引用。

closures 这就是我对闭包的理解:将一个函数分配给一个变量,并在不同的环境中重用它

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

闭包是可以访问引用环境的函数。在Javascript中,这意味着由另一个函数返回的函数可以访问原始函数范围

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

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

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

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

我对闭包的看法略有不同()。顺便说一句,问题很好(+1)。@Renan:也许这应该是另一个问题,但是如果有一个引用环境,并且它可以根据调用函数的方式进行更改,我是否可以简化并说“它用于不同的环境?”据我的理解,这对应于“函数可以访问不在其参数列表中的变量”。但是,由于我的无知,我在这里可能会随意使用“环境”一词。你能给我指一下功能环境定义的参考资料吗?或者,如果我没有抓住要点,你能简单地描述一下为什么你的观点与我的观点不同吗?看看我的答案,这些引语会让你在每一个主题上都受益匪浅。我觉得这可能更适合你。@zzzzBov你可能是对的,但是对于每个人来说,了解一些基本知识是很好的,因为承诺也不是jQuery所独有的。不,他们不是,但他提到了jQuery的名字,所以我就是这样回答的。主要的一点是我试图阐述的对它们的定义。我确实在我的答案中添加了这一点来帮助这一点。我对这个答案都很满意,直到“因为Javascript是异步的()…”哦,我的意思是非阻塞的。。。如果有异步的东西,它不会等待响应。谢谢你直截了当的回答。这给我留下了一个问题:如何在承诺中使用闭包?当我使用承诺时,有时我希望从以前的各种承诺中隐式地将值发送给then函数。有关使用使用“bind”显式创建的闭包的解决方案,请参见的结尾。