先上大佬的文章吧
异步和同步
异步是指一个不等一个任务返回结果(成功/失败/或其他结果),就直接执行下一句代码。
同步则是前者执行完拿到结果(返回值)了之后,再执行下一句代码。
异步常见是在定时器和ajax中会产生
异步情况下,代码的书写顺序和执行的顺序是不同的
可以通过回调拿到异步的结果,按同步的顺序执行
示例代码:
让异步代码按顺序执行
function a (fn){ setTimeout(function(){ console.log('显示a') fn.call() },3000) } a(function b (){ console.log('显示b') }) //显示a //显示b
ajax使用异步
// 原代码——同步的写法 function taskB(){ var response = $.ajax({ url:"/data.json", async: false // 注意这里 async 为 false,表示是同步 }) return response // 十秒钟后,返回 response } taskA() taskB() taskC() //执行顺序是A—B—Ajax—C //改成异步 // 异步的写法 function taskB(){ var result = $.ajax({ url:"/data.json", async: true // 异步 }) return result // 一定要注意,现在的 result 不是上面的 response } taskA() taskB() taskC() //执行顺序是A—B—C JS引擎执行 // —Ajax 浏览器的网络请求模块执行 //这里C和Ajax同时执行,但是执行主体不同
回调(call back)
上一篇大佬文章
回调是一种特殊的函数调用方式,当一个函数作为参数传入,后被调用,那这个函数就是回调函数
示例代码:
functon fn(fn2){ fn2.call() } // fn 将别人传给它的 fn2 调用了,这种调用就是回调