一:什么是单线程?
一个时间之内js只能做一件事
二:什么是任务队列?
1. 分同步任务和异步任务
2. 执行时间:
优先执行同步任务然后异步任务 顺序( 1.执行同步任务 2.遇到异步任务先挂起 3.同步任务执行完之后再执行异步任务)
下面看几个小例子:
/// 异步任务(setTimeout和setInterval DOM事件 ES6中的Promise)
console.log(1);
//异步任务
setTimeout(function(){
console.log(2);
},0);
console.log(3);
/// 死循环 不会输出B
console.log('A');
setTimeout(() => {
console.log('B');
}, 0);
while (true) {}
// * 使用var 定义变量的时候,作用域是在foo函数下,在for循环外部,在整个循环中是全局的,每一次的循环实际上是为index赋值,循环一次赋值一次,4次循环完成,index最后的结果赋值就为4;
// * 就是被最终赋值的index,就是4;
// * let的作用局的块级作用局,index的作用域在for循环内部,即每次循环的index的作用域就是本次循环,下一次循环重新定义变量index;所以index每次循环的输出都不同
for (var index = 0; index < 4; index++) {
setTimeout(() => {
console.log('var声明',index);
}, 1000);
}
for (let index = 0; index < 4; index++) {
setTimeout(() => {
console.log("let声明",index);
}, 1000);
}
参考文章:彻底弄懂 JavaScript 执行机制