题
我问 关于回调的问题 并提出了另一个问题(见评论)。闭包与回调有何不同?
解决方案
检查以下内容: http://jibbering.com/faq/faq_notes/closures。 HTML 。它可以帮助您更好地理解闭包与函数的关系。
以下是一组闭包示例: http://www.javascriptkit.com/javatutors/ closures2.shtml
基本上,回调就像一个函数指针。使它成为闭包的位是当该函数访问它所在的上下文中的任何内容时,就像它之外的变量一样。当发生这种情况时,该函数将使用变量的当前值(而不是复制它们)。见例4.
其他提示
有一个很好的闭包定义此处:
A“封闭”是一种表达 (通常是一种功能)可以拥有 自由变量和 绑定这些变量的环境 (即“关闭”表达式)。
在实践中,这意味着它是一个具有一些隐藏变量的函数。
回调是一个更高层次的想法。通常,它是一个传递的函数,其目的是在稍后调用。在JavaScript中,闭包通常用作回调。
简单来说:使用上下文变量的回调是一个闭包。
取决于上下文变量(即绑定变量(==对象状态)的回调将是一个闭包。它将是一个纯函数,否则,它只需要自由变量(==参数)。
这是区分这两者的方法:
封闭
Closure用于扩展功能,例如,如果用户点击按钮,我们希望在屏幕上发生某些事情,在这种情况下,我们将使用Closure来传递用户事件(点击),然后将数据推送到视图。
回调
回调或多或少类似于闭包,但它更习惯于通知并提供同步功能。例如,如果你执行jQuery Ajax调用,你将有回调,如
success()
,error()
,beforeSend()
等等。第四个来处理异步数据。
什么是回调函数?
回调函数是一个函数,它是:
- 作为参数传递给另一个函数
- 在某种事件之后被调用(लागू)
- 一旦其父函数完成,就会调用作为参数传递的函数
用简单的英语我们说 回调是由另一个函数调用的任何函数,该函数将第一个函数作为参数或作为参数传递的函数
- 笔记 :调用 :函数内部的代码在函数被调用时执行。或者我们这样说,使用术语“调用函数”而不是“调用函数”是常见的。
“调用函数”、“启动函数”或“执行函数”也很常见。
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);
关闭:
另一个函数内的函数关键字,您正在创建一个闭包
或者一个函数返回另一个函数,我们可以说闭包
注意简单英语: 有点不同的是,在另一个函数中作为参数传递的函数是回调,或者如果在另一个函数中定义是闭包
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**
我看不出这两者是如何相关的?闭包将局部状态的某些部分转化为某种功能,将其视为通过引用传递。
回调旨在通知您有关某些更改并重定向程序流。闭包可以修改本地状态,但是你永远不会像处理回调一样处理处理器时间。