定时器-延时函数
- JavaScript 内置的一个用来让代码延迟执行的函数,叫 setTimeout, 语法:
setTimeout(函数,时间)
- setTimeout 仅仅只执行一次,所以可以理解为就是把一段代码延迟执行, 平时省略window
- 清除延时函数:
const itmer = setTimeout(function name() {
console.log(23);
}, 1000)
clearTimeout(itmer)
注意点
- 延时器需要等待,所以后面的代码先执行
- 每一次调用延时器都会产生一个新的延时器
延时函数和间歇函数
- 两种定时器对比: 执行的次数
- 延时函数: 执行一次
- 间歇函数:每隔一段时间就执行一次,除非手动清除
- 延时函数递归实现定时器
递归函数
递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。递归函数必须有结束条件。 当函数在一直递推,直到遇到墙后返回,这个墙就是结束条件。 所以递归要有两个要素,结束条件与递推关系
注: 递归的时候,每次调用一个函数,计算机都会为这个函数分配新的空间,这就是说,当被调函数返回的时候,调用函数中的变量依然会保持原先的值,否则也不可能实现反向输出。
JavaScript执行机制
JavaScript 语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。
这是因为 Javascript 这门脚本语言诞生的使命所致——JavaScript 是为处理页面中用户的交互,以及操作 DOM 而诞生的。比如我们对某个 DOM 元素进行添加和删除操作,不能同时进行。 应该先进行添加,之后 再删除。
单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。这样所导致的问题是: 如 果 JS 执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉。
为了解决这个问题,利用多核 CPU 的计算能力,HTML5 提出 Web Worker 标准,允许 JavaScript 脚本创建多个线 程。于是,JS 中出现了同步和异步。
同步和异步
同步: 前一个任务结束后再执行后一个任务,程序的执行顺序与任务的排列顺序是一致的、同步的。
异步: 你在做一件事情时,因为这件事情会花费很长时间,在做这件事的同时,你还可以去处理其他事 情。
本质上的区别:这条线上各个流程的执行顺序不同
同步任务: 同步任务都在主线程上执行,形成一个执行栈
异步任务: js的异步是通过回调函数饰演的,一般而言,异步任务分三种:
- 普通时间
- 资源加载
- 定时器
注意: 异步任务添加到 任务队列 中
事件循环
1.先执行执行栈的同步任务
2.异步任务放入任务队列中
3.一但执行栈中所有的同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,于是被读取的异步任务结算等待状态,进行执行栈,开始执行
由于主线不断的重复获得任务,执行任务,再获取任务,在执行,所以这种机制被成为事件循环(event loop)