一、 JS浏览器的线程。
(Java Script 属于一门单线程的编程语言,但本质上(是由主线程分支为)多条,子线程去分别执行,释:抛出一条主线程,其他子线程都放入浏览器的线程池中,由JS主线程调用。)
JS线程包括:
①. JS主线程(js内核,js引擎)
负责处理javascript脚本的,为JS中的主线程,但实际上JS属于单线程异步语言。( 异步指的由子线程进行完成,该线程负责进行完成的内容,主线程值负责调度子线程,所以JS在某方面也可以说成多线程)
与GUI线程是互斥,(其中一方运行时另一方暂停等待)
子线程包括:
②. GUI渲染线程:
负责渲染浏览器页面,解析HTML,CSS,构建DOM数,Render数,布局和绘制等。
当界面需要重绘(Repaint)或者由于某种操作引发回流(reflow)时,该线程就会在执行。
与JS主线程互斥。
③.事件监听线程:
用来完成事件处理的,例如 click,mouseover,mouseout.............
④.网络线程:
用来处理http网络请求
⑤.计时器线程:
用来处理定时器。setlnterval 和 setTimeout
总的来说是由以上五个线程组成的JS线程。
二:JS的异步代码 和 同步代码的区别
同步代码指的就是被JS主线程执行的代码就是同步代码,如console.log() ,for()循环 ,等等
异步代码就是指 被子线程执行的,代码就是异步代码,如计时器,事件处理函数,网络互交。
三:JS是只能运行在浏览器端的语言吗?
是的:因为JS主要运行在浏览器端的,我们常用在浏览器端,
不是的:运行在浏览器端的只是 ECMAscript + webAPI(BOM/DOM)两个部分组成的,如果说把 换一套API的话,那就运行到其他的端口。
四:什么是执行栈 ?
(js运行环境称之为宿主环境,js的宿主环境就是浏览器)
语句的先后顺序 与 运行环境中的 执行栈有关! 执行栈是一种数据结构叫(call stack),存放各种函数的执行环境(AO),每一个函数执行之前,会创建执行环境,然后加入至执行栈中,函数调用完后,执行栈 会销毁该函数的执行环境。(先进后出,后进先出)执行栈中放入的都是同步代码。
JS主线程永远只执行 执行栈中的栈顶位置的代码。
事件循环
示例1. 以下代码执行多少次栈入栈出?
function a(){
console.log("a")
b()
}
function b(){
console.log("b")
c()
}
function c(){
console.log("c")
}
a()