概述: 同步和异步, 同步表示阻塞, 异步表示非阻塞
阻塞: 按照代码先后顺序依次执行
非阻塞: 边做什么 边做其他的事情
<script >
// 定时器
console.log(1);
function a() { console.log(2); }
setTimeout(a, 1000); // 定时器 异步编程的一种解决方案
console.log(3);
// 1 3 2
</script>
下面是一题实例:
<script>
for (var i = 0; i < 6; i++) {
setTimeout(function () {
console.log(i);
}, 1000);
}
</script>
输出666666
为什么?
//i的值从0-5变化的时候 setTimeout函数一共调用6次 但是每一次里面的函数没有执行过, 那要等到什么时候才调用呢,等到for循环都已经结束了,i=6 那么这个时候 6次setTimeout里面的函数就开始触发了
解决方案:
(1)最简单的办法:把var换成let
因为let具有块级作用域
(2)闭包:
(3)与(2)方式一样