JS是单线程的
同步:指的是等待一件事情完成之后才会去执行下一件事,JS中大部分都是同步编程。循环就是同步的,所以在编码过程中尽量减少循环的使用
异步:规划一件事情,但不是立即去执行,需要等待一定的事件,此时异步编程不会等待他执行,而是先去执行下面的操作,当下面的事情处理完再回过来执行这个事件
JS中异步编程只有四种情况:
1、定时器
2、事件绑定
3、ajax读取数据的时候设置为异步
4、回调函数也是异步编程的
var n = 0;
window.setTimeout(function () {
n ++;
console.log(n);
}, 0);
console.log(n);
先输出0,再输出1
因为浏览器对与定时器的等待时间都有一个最小值,若小于这个最小值,就会按照最小值时间等待
// 0 0 5 7 任务队列中谁先到时间就先执行谁
var n = 0;
window.setTimeout(function () {
n += 2;
console.log(n);
}, 100);
window.setTimeout(function () {
n += 5;
console.log(n);
}, 50);
console.log(n);
for (var i = 0; i < 10000000; i++) {}
console.log(n);
因为绑定事件是异步编程的,先绑定完点击的时候再触发, 解决方法就是闭包
// 选项卡绑定
for (var i = 0; i < oList.length; i++) {
oList[i].onclick = function () {
tabChange(i);
}
}