浏览器底层运行机制
浏览器底层运行机制
JS之所以能够在浏览器中运行,是因为浏览器给JS提供了执行的环境 => 栈内存(Stack)
-
堆栈内存
- 栈(Stack)内存:提供代码执行的环境
- 堆(Heap)内存:存放东西(属性和代码)
- 浏览器会把内置的一些属性方法放到一个单独的内存中,堆内存
- 任何开辟的内存都有一个16进制的内存地址,方便以后找到这个内存
- ECStack(Execution Context Stack):栈内存(执行环境栈)是浏览器在计算机中分配的一块内存,专门用来供代码执行的
-
EC(Execution Context): 执行上下文,代码自己执行所在的环境
- 全局的执行上下文(ECG)
- 函数中的代码都会在一个单独的私有的执行上下文中处理
- 块级的执行上下文
- GO(Global Object): 全局对象,浏览器端会让window指向GO
- VO(Varibale Object): 变量对象,在当前的上下文中,用来存放创建的变量的地方(每一个执行上下文中都会有一个都会有一个自己的变量对象)
- AO (Activation Object): 函数私有上下文中的变量叫做AO(activation Object)活动对象,但是也是变量对象
创建一个变量对象(值类型)
- 创建一个值
- 创建一个变量
- 让变量和值关联在一起
创建一个变量对象(引用类型)
- 创建一个堆内存
- 把键值对存到堆内存中
- 堆内存地址放到栈中供变量调用
- 基本数据类型都是直接存放到栈内存中的
- 引用数据类型值是先开辟一个堆内存,把键值对放进去,再地址放到栈中供变量关联使用
- 所有的指针赋值都是指针的关联指向
练习题解析: