JS代码运行机制
1、每调用一个函数,就将这个函数当作一个帧压入栈中,先调用的先进栈后出栈,后调用的后进栈先出栈;
2、对象被分配在堆(非结构化)中;
3、进入队列的待处理消息,先进入的先处理,被处理的消息会被移出队列,并将处理消息关联的回调函数作为一个帧压入栈中,接着将栈中回调函数执行完,再执行消息队列中的下一个消息;
4、消息队列中,必须等待上一个消息执行完,才能接着执行下一个消息。这种机制的缺点是,如果上一个消息执行时间过长,在此期间就无法完成与用户之间的交互,例如滚动或点击;
5、每当一个事件发生,并且这个事件上绑定了一个事件监听器,那么这个事件就会作为一个消息添加到消息队列,该事件的事件行为会被压入栈中,如果该事件没有绑定监听器,该事件就会被忽略;
6、延时器setTimeout()接收两个参数:第一个为待加入消息队列中的消息,第二个为该消息被加入到队列的最小延迟时间(并非确切延迟时间)