31

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

4

9 回答 9

22

检查这里的介绍:http: //jibbering.com/faq/faq_notes/closures.html。它可以帮助您更好地理解闭包与函数的关系。

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

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

于 2009-03-05T18:21:01.970 回答
13

不同的定义:

回调-

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

关闭-

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

于 2009-03-05T18:21:28.833 回答
12

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

于 2017-02-05T14:55:57.063 回答
5

这里有一个很好的闭包定义:

“闭包”是一个表达式(通常是一个函数),它可以具有自由变量以及绑定这些变量的环境(即“关闭”表达式)。

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

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

于 2009-03-05T18:20:49.600 回答
1

依赖于上下文变量又名绑定变量(== 对象状态)的回调将是一个闭包。它将是一个纯函数,否则,当它只接受自由变量(== 参数)时。

于 2009-03-05T18:24:36.627 回答
1

这是区分这两者的一种方法:

关闭

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

打回来

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

于 2018-06-06T14:57:23.237 回答
0

关闭:

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

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

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

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**
于 2018-09-12T17:06:36.357 回答
0

什么是回调函数?

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

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

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

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

“调用函数”、“启动函数”或“执行函数”也很常见。

 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); 
ऐसे कॉल करते है

于 2018-09-12T17:09:50.997 回答
-1

我看不出这两者有什么关系?闭包将局部状态的一部分携带到某种函数中,将其视为通过引用传递。

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

于 2009-03-05T18:23:21.997 回答