<!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <script> function f1(func){ //func函数作为参数传入f1函数 console.log('1'); //首先进入f1函数 setTimeout(function(){ console.log('2'); //继续进入setTimeout方法,继续往下走,看到了调用func函数,然后去找func函数定义的地方,跳到f2函数内 func(); console.log('4'); //走完f2函数,又跳回func函数,继续走f1函数; },1000); } function f2(){ console.log('3'); //跳进f2函数,继续走。走完f2函数,跳回去func函数那地方,继续走完f1函数; } f1(f2) </script> </body> </html>
打印出来的顺序是:1234;
把f2函数作为参数传入到f1函数中,也就是异步调用f2函数。可以看到,f1函数没有执行完就碰到了f2函数,执行完f2函数,再接着回去继续执行f1函数。
JavaScript中的“回调”机制,类似于操作系统中的“中断和响应” —— 延时程序设置一个“中断”,然后执行func(),待1000毫秒时间到后,再回调执行f1(),再进入setTimeout函数
()执行。