[JavaScript]JS基础知识(下)

异步和单线程

异步

同步

同步会阻塞下面代码的执行,什么时候消除阻塞,才会继续往下走。

异步不会阻塞,只是继续等待。

异步同步的差异在于,会不会阻塞后续代码的执行。

何时需要异步?

在可能发生等待的情况。

等待过程中不能像alert一样阻塞程序执行。

因此,所有的“等待的情况”都需要异步。

前端使用异步的场景

定时任务:setTimeout(设置多少毫秒之后执行函数体),setInterval(设置每多少毫秒之后执行函数体)

网络请求:ajax请求:

动态<img>加载:

事件绑定:

异步和单线程

执行第1行,打印100,

执行setTimeout后,传入setTimeout函数会被暂存起来,不会立即执行(单线程的特点,不能同时干两件事),

执行最后一行,打印300,

待所有程序执行完,处于空闲状态时,会马上查看有没有暂存起来的要执行的函数,

发现暂存起来的setTimeout中的函数无需等待时间,就立即发过来执行。

题目

1、同步和异步的区别是什么?分别举一个同步和异步的例子。

同步会阻塞代码执行,而异步不会。

Alert是同步,setTimeout是异步。

2、一个关于setTimeout的笔试题:

输出:1 3 5 2 4

3、前端使用异步的场景有哪些?

都需要等待,单线程,为了不阻塞,只能等待。

其他知识

日期

Math

获取随机数Math.random()

数组API

forEach 遍历所有元素:

every 判断所有元素是否都符合条件:

some 判断是否有至少一个元素符合条件:

sort 排序

map 对元素重新组装,生成新数组

filter 过滤符合条件的元素:

对象API

for in

题目

1、获取2017-06-10格式的日期

2、获取随机数,要求是长度一致的字符串格式

3、写一个能遍历对象和数组的通用forEach函数