JavaScript基础知识——异步和单线程
1.同步和异步的区别是什么?分别举一个同步和异步的例子
2.一个关于setTimeout的笔试题
3.前端使用异步的场景有哪些
在可能发生等待的情况,等待的过程中不能像alert一样阻塞程序运行
- 定时任务:setTimeout、setInterval
- 网络请求:ajax请求,动态```<img>```加载
- 事件绑定
//ajax请求 console.log('start'); $.get('data/data1.json',function(data1){ console.log(data1); }) console.log('end'); //start //end //数据 ``` ``` //图片加载 console.log('start'); var img=document.createElement('img') img.onload=function(){ console.log('loaded'); } img.src='images/icon.jpg' document.body.appendChild(img) console.log('end'); //start //end //loaded ``` - 事件绑定 ``` console.log('start'); document.getElementById('btn1').addEventListener('click',function(){ console.log('clicked') }) console.log('end'); //start //end //点击打印clicked ``` - 异步和单线程 ``` console.log(100); setTimeout(function(){ console.log(200); }) //未设置等待时间 console.log(300); //100 //300 //200 ``` - 执行第一行,打印100 - 执行setTimeout后,传入setTimeout的函数会被暂存起来,不会立即执行(单线程的特点,不能同时执行两个任务) - 执行最后一行,打印300 - 待所有任务执行完,处于空闲状态,才执行暂存的任务 - 暂存的setTimeout无等待时间,立即执行
知识点:
1、什么是异步
异步:
console.log(100); setTimeout(()=>{ console.log(200); },1000); console.log(300); //100 //300 //+1s 200
同步:
console.log(100); alert(200);// 此处如果不确定,就会等待,只有确定后,下面的才能执行 console.log(300);
何时需要异步?
a、在可能发生等待的情况;
b、等待过程中不能像alert一样阻塞程序运行
c、等待的情况都需要异步
2、前端使用异步的场景
3、异步和单线程