什么是闭包和回调?

时间:2010-01-15 08:26:45

标签: javascript callback closures

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

1 个答案:

答案 0 :(得分:37)

在Stackoverflow中已经很好地处理

闭包只是一个选择: -

How does a javascript closure work?
What exactly does “closure” refer to in JavaScript?
can you say this is a right example of Javascript Closure.. Where the places we need to consider avoiding the closures??
JavaScript scope and closure
Javascript Closures and ‘this’ context
JavaScript - How do I learn about “closures” usage?

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

 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 {{1}}的原始内容。