相关概念
执行环境栈(ECStack)
浏览器会在计算机内存中申请一块儿内存,专门用来供js代码执行。这块儿区域被称之为执行环境栈ECStack。
全局对象GO(Global Object)
全局对象:浏览器会把内置的一些属性和方法放到一个单独的内存(堆内存)中。
在浏览器端,浏览器会让window指向GO。
在node端,node会让global指向GO。
执行上下文(Eexcution Context)
执行上下文就是当前JS被解析和执行时存在的环境。
- 全局的执行上下文
- 函数中的代码都会在单独的私有执行上下文中处理
- 块级的执行上下文
变量对象VO(Variable Object)
在当前上下文中,用来存放创建变量和值的地方。每一个执行上下文中都会有一个自己的变量对象。函数私有上下文中的叫做AO(Activation Object 活动对象,也是变量对象)。
赋值操作的基本过程
基本类型
- 创建一个值(栈内存中)
- 创建一个变量 (栈内存中)
- 让变量和值关联在一起
引用类型
- 创建一个堆内存
- 把键值对存储到堆内存中
- 堆内存地址放在栈中个,供变量调用
作用域
前置知识
局部变量:在函数内部定义的变量,或者使用let/const在块级作用域定义的变量,外面不能使用。