Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中同步回调函数的用途是什么?_Javascript_Asynchronous_Callback - Fatal编程技术网

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

JavaScript中同步回调函数的用途是什么?,javascript,asynchronous,callback,Javascript,Asynchronous,Callback,我一直在广泛阅读web异步编程以及JavaScript和jQuery中回调的使用。我已经理解了AJAX的基本原理。我无法理解的是,在异步编程中没有使用回调函数时,回调函数的用法 根据我的理解,简单地向函数添加回调并不能使其成为非阻塞/异步的。异步功能实际上是由环境(浏览器API)提供的。因此,向我编写的函数添加回调不会导致任何异步执行 例如: var X; function Test(A, B, Callback) { X=A+B*A*B; Callback(X); } Test(99999,

我一直在广泛阅读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而不是代数运算,我会首先得到第二个警报,因为异步实现。在请求期间,代码流不会像在数学运算期间那样被阻塞

因此,在非异步调用中,即使使用回调也会阻止代码执行时,回调有什么用?

你说得对。
通常没有理由进行同步回调


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

一些非常常见的同步回调示例是
数组上的方法。prototype
forEach
map
filter
,等等


回调的作用是提供一个可以在更大的算法中轻松交换的部分实现。一些设计模式喜欢并且浮现在脑海中。

每当我使用复杂的访问方法时,我都会按照您描述的方式使用回调,我不想重写这些方法,当我知道组件将在组件不知道的上下文中运行时,我会使用回调,但我对开发或使用事件发射器并不特别感兴趣


我不知道其他人是否觉得他们和我一样容易相处。因此,在一个团队中,我试图了解以您描述的方式使用回调是否有效。

回调函数的使用是为了允许在另一个函数中执行一些可配置的子逻辑。它与异步/同步无关。Asynchronous必须使用回调函数来定义异步操作完成时发生的逻辑。Asynchronous只能由js API或DOM提供,或者使用setTimeout进行模拟,其他一切都是同步的。强制异步模式交互将允许workhorse在不接触消费者的情况下将自身重构为异步模式,因此这可能是一个案例或计划中的扩展,或者至少为这样的扩展留下了可能。例如,一些代码部分现在可以依赖ram中的缓存来获取数据,并且随着越来越多的人使用该服务而使用数据库,而不会破坏实现数据使用功能的代码。请详细说明一下?如果可以从方法中调用函数,为什么要将函数传递给方法?与array.foreach()方法类似,当我可以迭代元素并在循环中将每个元素传递给不同的函数进行处理时,我无法理解传递回调函数的必要性。@我想与您谈谈回调的问题,我们可以聊聊吗?使用回调的一个很好的理由,除了异步请求,允许在函数中使用模块化子逻辑。这不是真的。回调在同步上下文中非常有用,只需查看Array.prototype.filter和Array.prototype。map@Ferenjito:问题是关于异步样式的完成回调,而不是其他类似的回调。然后,除了作为设计模式的实现之外,它在同步代码中没有其他意义?设计模式的存在是为了解决问题。因此,如果进行概括,同步回调可以解决问题。我指出了两种设计模式,这样您就可以看到一些通过同步回调解决的特定类型的问题。@Tibos我想和您谈谈js中的回调,我们可以聊聊吗?我有些怀疑