JavaScript由三大部分组成
1.ECMAScript,包含了基本对象及其语法。(遵循ECMA标准)
2.DOM,包含处理网页内容的方法及接口。(遵循W3C标准)
3.BOM,包含与浏览器交互的方法及接口。(无标准,过于强大,很多方法禁用)
JS属于解释型语言,不直接翻译成机器源码,它的解释器被称为JS引擎,属于浏览器的一部分。
JS是一种单线程语言,单线程运行时遇到耗时的任务(涉及过多I/O操作)会导致过多的等待时间。所以JS采用了Event Loop机制。
Event Loop机制
为程序设置一个主线程和一个任务队列(task queue FIFO),同步任务会在主线程上排队执行。异步任务不直接进入主线程,而是进入task queue进行等待,当task queue通知主线程某个异步任务可以执行后,该异步任务进入主线程。
异步运行机制
1.所有同步任务都在主线程上执行,形成一个执行栈。
2.主线程之外,还存在一个"任务队列"(task queue)。异步任务会给任务队列放置各种事件(click,load,done)。(主线程读取"任务队列",就是读取里面有哪些事件。)
3.一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件以及对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
4.主线程不断重复上面的第三步。
只要栈中的代码执行完毕,主线程就会去读取"任务队列",依次执行那些事件所对应的回调函数。所谓"回调函数"(callback),就是那些会被主线程挂起来的代码。异步任务必须指定回调函数,当主线程开始执行异步任务,就是执行对应的回调函数。
参考文献:阮一峰的网络日志http://www.ruanyifeng.com/blog/javascript/