【问题标题】:What are Closures and Callbacks?什么是闭包和回调?
【发布时间】:2011-01-05 10:20:10
【问题描述】:

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

【问题讨论】:

标签: javascript callback closures


【解决方案1】:

闭包已经在 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 的原始内容。

【讨论】:

  • 回调是最常与 setTimeout 一起使用的吗?
  • setTimeout 是一种常见用法,但同样常见的是onreadystatechange 对象上的onreadystatechange。您还将看到在使用 Javascript 框架(如 JQuery)的代码中广泛使用回调。在许多这些情况下,回调只是您可以提供一些逻辑来自定义大型但其他标准流程的地方。回调也经常用于在一组对象上执行相同的功能。
猜你喜欢
  • 2012-12-08
  • 2016-04-06
  • 2011-01-09
  • 2023-03-22
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多