Vo对象
每一个执行上下文都会关联一个vo(Variable Object)对象,变量和函数声明都会被添加到这个对象当中。
当全局代码被执行的时候,全局代码的上下文关联的就是GO对象了,
JS代码执行前
在JS代码前会进行js的解析阶段,这个时候我们

因为这块代码是全局代码,所以在他解析的时候会把用到的变量和函数都放在与之关联的VO也就是GO中,这个时候内存中的表现

将代码用到的变量加到Go中因为这个时候只是解析阶段还没有执行所以变量的值都是undefined还有一个foo函数,当解析到函数的时候,函数会被优先处理内存中开辟一个空间用来存放函数

这就是代码执行前内存中的表现
JS代码执行后
JS代码是从上往下执行的,下面我们就依次执行代码


var name=hello的时候 GO中的表现
下一块代码是函数,函数还没有被执行所以跳过,依次去修改Go中num1 num2 以及result 最后打印出来结果

最后一步是函数的执行,内存中的表现,下一篇文章继续说
(之所以我们可以在变量定义前就打印在函数定义的位置之前就可以调用函数,就是因为经过了一次解析阶段这些变量没被执行的时候就已经在VO中了,只不过没执行的时候没有值,这里只讨论var定义的 let const后面说到块级作用域的时候再来分析)