Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.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_Callback - Fatal编程技术网

Javascript自定义回调函数

Javascript自定义回调函数,javascript,callback,Javascript,Callback,我有一个关于javascript回调函数的问题。我所理解的是回调函数应该允许其他语句在需要时间的情况下继续。所以我创建了一个自定义回调函数进行检查,但并没有得到预期的结果。我做错什么了吗 函数testparam1、param2、cb{ iftypeofcb==“函数”返回cbparam1,param2 else console.log'imnota func'; } 函数calbackFunca,b{ 控制台。记录“你好,我是”+a+“”+b; } setTimeoutfunction超时{

我有一个关于javascript回调函数的问题。我所理解的是回调函数应该允许其他语句在需要时间的情况下继续。所以我创建了一个自定义回调函数进行检查,但并没有得到预期的结果。我做错什么了吗

函数testparam1、param2、cb{ iftypeofcb==“函数”返回cbparam1,param2 else console.log'imnota func'; } 函数calbackFunca,b{ 控制台。记录“你好,我是”+a+“”+b; } setTimeoutfunction超时{ 控制台。记录“超时” },0; 测试'callback','function',calbackFunc;
console.log'console' 您正在混淆堆栈和队列

事件循环 在中,同步调用进入堆栈,而异步调用进入堆,完成后返回队列。函数只有在为空时才从队列移动到堆栈

在你的例子中 阶段1:调用设置超时 这会将函数放入堆中,由于超时设置为0,它会立即移动到_队列。这是否意味着它正在立即执行?不,因为您当前的函数main尚未完成

第2阶段:呼叫测试 这段代码是同步的!调用test时,我们向堆栈中添加一个函数。然后我们将cb调用添加到堆栈中。 这意味着我们需要在进入第三阶段之前完成这两项工作

阶段3:console.log 这里没什么要解释的

第3阶段后
当前主堆栈已完成,因此队列中的函数现在添加到堆栈中,记录“超时”。

运行回调函数后,您正在记录控制台。回调只是作为参数传递的常规函数。所以它和其他函数一样是同步的。您传递的回调在测试完成执行之前运行。调用延迟为0的setTimeout不会立即运行传递的函数,它仍在计划中。它很快就会运行。可能会重复。那么我如何在不使用SetTimeOut的情况下创建异步回调函数谢谢。真的帮助我了解了它的内部工作原理。