繁体   English   中英

闭包与回调有什么不同?

[英]How is a closure different from a callback?

我问了一个关于回调的问题并得出了另一个问题(见评论)。 闭包与回调有什么不同?

请查看以下内容: http//jibbering.com/faq/faq_notes/closures.html 它可以帮助您更好地理解闭包与函数的关系。

这是一组闭包示例: http//www.javascriptkit.com/javatutors/closures2.shtml

基本上,回调就像一个函数指针。 使它成为闭包的位是当该函数访问它所在的上下文中的任何内容时,就像它之外的变量一样。 当发生这种情况时,该函数将使用变量的当前值(而不是复制它们)。 见例4。

不同的定义:

回调 -

回调是可执行代码,作为参数传递给其他代码。

关闭 -

闭包是在包含一个或多个绑定变量的环境中计算的函数。 调用时,该函数可以访问这些变量。

简单来说:使用上下文变量的回调是一个闭包。

有倒闭的一个很好的定义, 在这里

“闭包”是一个表达式(通常是一个函数),它可以将自由变量与绑定这些变量的环境(“关闭”表达式)结合在一起。

在实践中,这意味着它是一个具有一些隐藏变量的函数。

回调是一个更高层次的想法。 通常,它是一个传递的函数,其目的是在稍后调用。 在JavaScript中,闭包通常用作回调。

根据上下文变量(即绑定变量(==对象状态))的回调将是一个闭包。 它将是一个纯函数,否则,它只需要自由变量(==参数)。

以下是区分这两者的方法:

关闭

Closure用于扩展功能,例如,如果用户单击按钮,我们希望在屏幕上发生某些事情,在这种情况下,我们将使用Closure来传递用户事件(单击)然后将数据推送到风景。

打回来

回调或多或少类似于闭包,但它更习惯于通知并提供同步功能。 例如,如果你执行jQuery Ajax调用,你将有回调,如success()error()beforeSend()等等来处理异步数据。

关闭:

  • 另一个函数中的函数关键字,您正在创建一个闭包

  • 或者一个函数返回另一个函数,我们可以说是闭包

注意简单英语:在另一个函数中作为参数传递的一点点差异函数是回调,或者如果在另一个函数中定义是闭包

 var length = 101; function fn2() { console.log("fffxxx: "+this.length); } var obj = { length: 5, method3: function(fn) { fn(); arguments[0](); } }; obj.method3(fn2, 1); 
**输出होगा

 fffxxx:101 fffxxx:2** 

什么是回调函数?

回调函数是一个函数,它是:

  • 作为参数传递给另一个函数
  • 在某种事件之后被调用(लागू)
  • 一旦其父函数完成,则调用作为参数传递的函数

在简单英语中,我们说 回调是由另一个函数调用的任何函数,它将第一个函数作为参数或作为参数传递的函数

  • 注意: 调用 :函数内部的代码在调用函数时执行。 或者我们这样说通常使用术语“调用函数”而不是“调用函数”。

通常说“调用函数”,“启动函数”或“执行函数”。

  function getUserInput(firstName, lastName, age, callback2,callback1) { var fullName = firstName + " " + lastName; // Make sure the callback is a function if (typeof callback2 === "function") { // Execute the callback function and pass the parameters to it callback2(fullName, age); } if (typeof callback1 === "function") { callback1(lastName); } } function callbackforlastname1(lname){ console.log("---"); } function genericPoemMaker(name, aged) { console.log(name + " is finer than fine wine."); console.log("A " + aged + " of unfortunl smile"); } getUserInput("Avinash", "Maurya", "26", genericPoemMaker,callbackforlastname1); 
ऐसेकॉलकरतेहै

我看不出这两者是如何相关的? 闭包将局部状态的某些部分转化为某种功能,将其视为通过引用传递。

回调旨在通知您某些更改,并重定向程序流。 闭包可以修改本地状态,但是你永远不会得到处理器时间来处理它,就像你使用回调一样。

暂无
暂无

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

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