JavaScript回调函数
参考:
https://blog.csdn.net/dawn0718/article/details/122766775
http://www.webkaka.com/tutorial/js/2022/0627190/
https://www.cnblogs.com/moltboy/archive/2013/04/24/3040213.html(未看完)
什么是回调?
把一段可执行的代码(可执行代码A)像参数传递那样传给其他代码,而这段代码(可执行代码A)会在某个时刻被调用执行,就叫做回调。如果代码立即被执行就称为同步回调,如果在之后的某个时间再执行,则称为异步回调。
通俗地理解:
我现在写一个函数,里面定义了函数A,那么函数A就是回调函数。回调函数就是定义了一定要(回来)执行的函数,至于什么时候执行、怎么执行、具体的执行内容是什么,javascript解释器不去理会,到了要执行的时候,把它放到执行队列里就行了。
有以下特点:
1、我们定义的函数(也可以不是我们自己定义的);
2、我们自己没有调用这个函数;
3、最终这个函数被调用执行了。
回调函数是JavaScript的精华之一
1、javascript本身只支持单线程,单线程容易造成阻塞;而作为宿主的浏览器是支持多线程的,javascript通过将回调函数放入执行队列的这种执行机制,在浏览器的支持下实现“多线程”。
2、当我们使用.sort()方法对一个数组进行排序时,如果不指定回调函数则默认升序;如果我们希望降序则可以传入一个比较函数作为回调,甚至可以只传入一个函数名称就可以实现,这为程序功能提供了更多的实现。
3、可以等待前一个函数调用的结果,然后执行另一个函数调用。例如setTimeout()中的回调函数。
回调函数可以分为两类:
1、同步的回调函数:它会在主线程上按照执行上下文的顺序立即执行,不会被放入回调队列中随后执行。数组遍历的相关回调函数都属于这种情况。
2、异步的回调函数:它会被放入回调队列中,待主线程执行完毕以后再执行。定时器回调和AJAX回调都属于这种情况。
let arr=[1,2,3,4,5,6, 6] arr.forEach((item)=>{//数组遍历类的回调函数,会立即执行 console.log(item); }) console.log('主线程的代码');//属于主线程的代码,会早于异步回调函数先执行 /* setTimeout(()=>{//是定时器回调函数,所以会被放入回调执行队列 console.log('@'); },2000) console.log('主线程'); */