*在我的前几篇文章中,有提到过v8是如何执行指令的,感兴趣可以去看看
首先,咱们先引入一串代码
var obj={
name:'小明',
age:'18',
like:{
one:'eat',
two:{game:['LOL'],
sports:[ 'run']
},
}
咱们来分析一下代码,这个代码就是简单介绍了一下小明,他的各种兴趣爱好什么的,那么让我们来看看v8引擎中的小明是怎么处理这段消息的
创建一个调用栈,用来存放和编译的过程。咱们拿一个图来进行解释说明
(在代码执行过程中,v8对不同的数据的处理方式也不一样:
- 对于原始类型的值,会直接存储到调用栈当中,因为原始值的大小固定且容易访问
- 对于复杂类型的值,由于他们的大小不定,甚至有的大小可以突破天际,所以v8会另外分配一个空间,叫做“堆”,然后通过引用地址(也就是我们俗称的指针)来对复杂类型的值进行说明
用“堆”来辅助调用栈的好处就是:保证了栈不会被设计的很大从而影响v8的执行效率,且不会爆栈)
接下来,把这些值存入执行上下文,执行代码,将原始值 存入调用栈中,如果遇到引用类型的值,则放入堆中,并生成一个引用地址,将引用地址存入栈中
接下来,那些代码就被执行成这样
这样,v8引擎就能一眼调用出想要用的数据了,大大提高了运行的效率