我是回调新手,想知道下面的函数是如何工作的

时间:2012-01-16 20:34:38

标签: javascript callback

function tempUpdates()
{
    getData(callbackID, "cabinetTemp", function(callback){  
       var currentTemp = convertBinary(callback);  
       for(var i = 0; i < tempUpdateList.length: i++)  
       {  
          tempUpdateList[i].innerHTML = currentTemp;  
       }  
   })  
} 

我不会介绍每个功能,但我想知道......

  • 回调什么时候实际执行?它是在循环完成后吗? (这是我怀疑的。)

  • 仅在循环完成后加载currentTemp变量?

3 个答案:

答案 0 :(得分:1)

只要初始函数完成其工作并决定调用它,就会调用回调函数。在您的示例中,它与for循环无关。这完全是回调的一部分。它位于回调内部,因此只要回调函数运行,它就会运行,反之亦然。

似乎getData是一个AJAX函数。所以它的作用基本上是从服务器获取数据,并在完成后调用回调。 getData方法本身是通用的。所有这一切都是它在锡上所说的 - 得到一些数据。程序员决定对数据做什么并不是它的关注点。它只是等待服务器发回数据,当它准备就绪时,它会调用回调,以便IT(也就是你,程序员在那里添加的功能)根据收到的数据执行特定于应用程序的内容。

假设getData函数的行为如下:

  1. 被调用,接收其参数
  2. 好的,先生。回调,只是留在那里,关键?
  3. DUDE!,SERVER !, DUDE! GIMME DATA!
  4. 一点延迟
  5. AH,HERE YA GO -
  6. getData收到数据 - “好的,我在这里完成了 - YO,回调,拿走这些数据并用它做任何你想做的事,我完成了我的工作”
  7. 回调处理数据
  8. 它不仅仅是AJAX或JavaScript。从理论上讲,这是一个接收回调作为参数的函数,几乎只是在完成其工作后立即调用函数。通常它是某种类型的动作,应该在之后发生第一个函数(在我们的例子中是getData)完成它的工作(比如getData获取数据)。

答案 1 :(得分:0)

var currentTemp = convertBinary(callback)

回调正在发送给convertBinary。它的运行取决于该功能的作用。除非convertBinary使用超时(或运行另一个异步函数,如AJAX),否则回调将在循环开始之前运行。

currentTemp返回一个在循环开始之前发生的值时,

convertBinary被“加载”。循环似乎将各种HTML元素设置为currentTemp的值。

显然,在getData调用函数(并将其传递给回调函数)之前,这些都不会运行。

答案 2 :(得分:0)

没有任何背景,很难说。如果您在执行回调时非常好奇,那么您应该尝试调试代码。您可以添加一些日志记录,这样您就可以看到执行的顺序,或者更好的是,在传递给getData的匿名函数中设置一个断点,并查看堆栈的样子。

获得一些洞察力的最简单方法是使用一些简单的console.log(“描述当前状态的一些有意义的字符串”);调用,但调试是一种更强大的技术。如果你正在使用webkit浏览器(chrome,safari),它就是内置的。Firefox有一个很棒的firebug插件,可以让你调试javascript。我不确定调试node.js的当前技术水平,但可能有一个模块你可以在那里使用。