详细分析单线程JS执行问题
大家在学习javascript的时候很多朋友在执行问题上有疑惑,长沙网络推广通过本篇文章给大家详细的分析介绍了JS的执行问题,希望能够帮助到你理解。
一、介绍
随着js不断学习,你可能会慢慢的好奇,用了这么久的js,却不知道这js在浏览器怎么被执行的,很尴尬。所以,我查阅很多资料来JS的执行过程,也分享出来,和大家一起学习。
本篇主要讲单线程的JS
涉及的名词JS引擎,单线程,执行栈,执行上下文(execution context)
二、JS引擎
JS引擎是浏览器的重要组成部分,主要用于读取并执行js。就是这家伙执行js的,但它不止于执行js。
各大浏览器的JS引擎
浏览器
Js引擎
Chrome V8 Firefox SpiderMonkey IE Chakra(查克拉) Safari Nitro/JavaScript Core Opera Carakan
虽然每个浏览器的JS引擎都不同,但他们执行js机制大致相同。
三、JS执行是单线程
单线程是指Js引擎执行Js时只分了一个线程给他执行,也就是执行js时是单线程的。
a.先了解线程 有人可能会疑惑,线程是什么?
直接举个例子吧,你打开一个浏览器(应用程序),那浏览器就是一个进程。打开浏览器后要做很多事情(各种分工)发送请求,接受请求,渲染页面,执行js等等这些就是一个个线程。
我这里只是简单的说一下,具体的大家可以找计算机操作系统资料深入学习。
b.为什么是单线程 有可能有疑惑,为什么js执行要单线程,如果多线程不是可以执行得快一点吗?
这个要回到Js历史了,布兰登·艾奇(Brendan Eich)老哥用10天创造js。当时js用来干嘛,简单的浏览器交互,验证,操作一下dom是吧。那把它设计成那么复杂干什么,而且如果多线程的话,操作dom会出现麻烦的事情,假设一个线程读取DOM节点数据的,另一个线程把那个DOM节点删了,呵呵。所以js一个线程就够了,也就是一步一步顺序运行下来。
c.证明一下单线程
单线程只能一步步执行下来,所以执行以下代码会导致阻塞(有个while死循环),不会弹出hello
while(1){} alert('hello');
四、执行栈
实现js执行时的单线程,js引擎维护一个执行栈。(先进后出)
来个例子运行这段代码是执行栈是怎么做的。
//运行代码 sayHello(); function sayHello(){ var message = getMessage(); console.log(message); } function getMessage(){ return 'hello'; }
执行栈代码模拟
//执行栈 var exeStack = []; //先压如全局执行环境 exeStack.push('globalContext'); //遇到执行sayHello函数,ok,压进去 exeStack.push('sayHello'); //执行sayHello函数发现,还有个getMessage函数,ok,压进栈 exeStack.push('getMessage'); //执行完了getMessage函数,弹栈 exeStack.pop(); //继续执行sayHello函数,又发现有console.log这个家伙,ok,你进栈 exeStack.push('console.log'); //执行了console后,输出hello,console 弹栈 exeStack.pop(); //这时sayHello执行完,弹栈 exeStack.pop(); //整个代码执行完,全局环境弹栈 exeStack.pop();
执行栈图示
这里主要是js在执行时的一个总体过程,你们可能会疑惑,压进栈里面的一块块(抽象)东西到底包含的是什么?
我可以告诉你们是,执行上下文,global是指全局的的执行上下文,其他的是函数执行上下文,那到底这些上下文包含什么,我会在下一篇详解。
五、小结
这篇主要是将js单线程是什么,并且怎么实现单线程的,先有个总体js执行过程的印象,下一篇会详细写js执行的细节,执行上下文。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程