什么是闭包和回调?

IT技术 javascript callback closures
2021-02-03 14:15:24

JavaScript 中的闭包和回调是什么?我还没有找到一个很好的解释。

1个回答

闭包已经在 Stackoverflow 中得到了很好的处理,这里只是一个选择:-

javascript 闭包是如何工作的?
JavaScript 中的“闭包”究竟指的是什么?
你能说这是 Javascript Closure 的一个正确例子.. 我们需要考虑避免闭包的地方在哪里??
JavaScript 范围和闭包
Javascript 闭包和“this”上下文
JavaScript - 我如何了解“闭包”的用法?

回调是一个更简单的概念。回调基本上是一个函数接受另一个函数作为参数的地方。在执行过程中的某个时刻,被调用的函数将执行作为参数传递的函数,这是一个回调通常回调实际上是作为一个异步事件发生的,在这种情况下,被调用的函数可能会在没有执行回调的情况下返回,这可能会在稍后发生。这是一个常见的(基于浏览器的)示例:-

 function fn() { alert("Hello, World"); }
 window.setTimeout(fn, 5000);

这里函数fn作为回调传递setTimeout函数。设置超时立即返回,但 5 秒后作为回调传递的函数被执行。

关闭和回调

很多时候创建闭包的原因(偶然、意外或故意)是需要创建回调。例如:-

 function AlertThisLater(message, timeout)
 {
     function fn() { alert(message); }
     window.setTimeout(fn, timeout);
 }

 AlertThisLater("Hello, World!", 5000);

(请阅读一些链接的帖子以掌握关闭情况)

创建一个包含部分message参数的闭包fn在调用AlertThisLater返回后执行一段时间,但fn仍然可以访问message.

回调最常与 setTimeout 一起使用吗?
2021-03-28 14:15:24
setTimeout 是一种常见用法,但同样常见onreadystatechangeXmlHttpRequest对象。您还将在使用 Javascript 框架(如 JQuery)的代码中看到回调的广泛使用。在许多这些情况下,回调只是您提供一些逻辑来自定义大型但其他标准流程的地方。回调也经常用于在一组对象上执行相同的函数。
2021-03-29 14:15:24