js单线程、js任务队列、异步操作
2017.9.22【面试阶段】
一:js由来
JavaScript 1995年首次设计在浏览器上,领导者为了让他看起来更像java,所以起名JavaScript;
js是兼容ECMA标准,也称为ECMAScript;js是一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言;
他的解释器称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早用在HTML上,添加动态功能
二:单线程是js的一大特性
不像其他语言如java一样多线程,不用考虑线程同步的问题;
js是用户与浏览器进行交互、进行DOM操作的,使得它必须是单线程,(比如你去修改一个元素的DOM,同时又去删除这个元素,
浏览器听谁的)
三:js任务有两种
同步任务:各个任务按照文档定义的顺序一一推入“执行栈”中,当前一个任务执行完毕,才会开始执行下一个任务
异步任务:各个任务推入“任务队列”中,只要在当前的所有同步任务执行完毕,才会将队列中的任务“出队”执行
四:任务队列(event loop):你可理解为用于存放事件的队列,当执行一个异步任务时,就相当于执行任务的回调函数
五:异步操作
io(ajax获取服务器数据)、用户/浏览器自执行事件(onclick、onload、onkeyup等等)以及定时器(setTimeout、setInterval)都可以算作异步操作