JavaScript中同步回调函数的用途是什么?

时间:2014-02-05 17:39:15

标签: javascript asynchronous callback

我一直在广泛阅读有关Web的异步编程以及在JavaScript和jQuery中使用回调。我已经理解了AJAX的基础知识。我不知道的是在异步编程中没有使用回调函数时使用。

根据我的理解,简单地向函数添加回调并不会使其成为非阻塞/异步。异步功能实际上是由环境(浏览器API)提供的。因此,向我编写的函数添加回调不会导致任何异步执行。

例如:

var X;
function Test(A, B, Callback) {
X=A+B*A*B;
Callback(X);
}

Test(99999,999999,function(Data) {
alert(Data);
});

alert("This is not printed first, as it would be in Async.");

在上面我拿了两个数字并对它们进行代数运算。即使我正在使用回调函数,执行操作时也会阻止代码执行。然后将执行回调,显示带有计算结果的警报。然后是下一个警报。如果我做了一个XMLHttpRequest而不是代数操作,我会先得到第二个警报,因为异步实现。在请求期间,代码流不会在数学运算期间发生阻塞。

因此,即使使用回调代码执行被阻止,在非异步调用中使用回调是什么?

3 个答案:

答案 0 :(得分:4)

同步回调的一些非常常见的例子是Array.prototype上的方法:forEachmapfilter等。

回调的作用是提供一个可以在更大的算法中轻松交换的部分实现。我想到了一些设计模式,如template methodstrategy

答案 1 :(得分:2)

你是对的。
通常没有理由进行同步回调。

异常包括有时可能是异步的回调,或者可以多次引发的回调(例如,[].map())。

答案 2 :(得分:0)

当我使用不想重写的复杂访问方法时,我会以您描述的方式使用回调,并且当我知道组件将在组件不了解的上下文中运行时,我会使用它们,但对开发或使用事件发射器并不特别感兴趣。

我不知道其他人是否发现它们像我一样容易使用。因此,在团队中,我试图了解以您描述的方式使用回调是否有成效。