什么是异步
异步(Asynchronous,即AJAX中的第一个A),是一种代码执行的顺序,与之相对应的是同步
JS中的同步执行意味着代码是按照从上到下的书写顺序执行,相对的,异步执行就是改变代码顺序的执行
JS中最常见的异步代码是setTimeout和setInterval,用一段例子来说明
console.log( "1" );
setTimeout(()=>console.log( "2" ), 0 );
setTimeout(()=>console.log( "3" ), 0 );
setTimeout(()=>console.log( "4" ), 0 );
console.log( "5" );
得到的结果是1,5,2,3,4。
可以看到,就算我们将执行时间设置成0秒,setTimeout函数依然会等所有代码执行完后再执行,是因为当setTimeout函数执行时,代码不会立即生效,而是进入一个先进先出的任务栈,当所有代码执行完毕后,再依次执行任务栈中的代码。
什么是回调
一句话解释回调,即“让函数有秩序的执行”。
根据上面所提到的异步的概念可以得知, 在JS中,有一部分异步函数会改变代码执行顺序,那如何将异步函数变成同步函数呢,我们可以通过回调(callback)来处理此类问题问题
举例说明:
setTimeout(()=>console.log( "1" ), 0 );
console.log( "2" );
//输出结果为,2,1
那么我们回调函数来改写例子
function print(fn){
console.log( "1" )
fn();
}
function fn(){
console.log( "2" )
}
setTimeout(print(fn), 0 );
//输出结果为,1,2