什么是闭包和回调?

20 javascript closures callback

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

Ant*_*nes 39

在Stackoverflow中已经很好地处理了闭包只是一个选择: -

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

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

 function fn() { alert("Hello, World"); }
 window.setTimeout(fn, 5000);
Run Code Online (Sandbox Code Playgroud)

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

闭包和回调

通常,闭包创建(偶然,偶然或故意)的原因是需要创建回调.例如:-

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

 AlertThisLater("Hello, World!", 5000);
Run Code Online (Sandbox Code Playgroud)

(请阅读一些链接的帖子来掌握闭包)

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