let a =12;
let b =a
b=13
log(a)
let a ={n:12}
let b=a
b['n']=13
log(a.n)
let a ={n:12}
let b =a
b={n:13}
log(a.n)
12 13 12
编译器把代码解析成为浏览器看得懂的结构,
词法解析
Ast抽象语法树
构建出浏览器能够执行的代码,
引擎(V8/weblit内核)
变量提升,作用域 闭包 变量对象,堆栈内存
GO VO AO EC ECStack
引擎想要执行代码,一定会创建一个执行栈,
栈内存,提供一个执行上下文的环境来执行代码,
ECStack执行环境栈
EC执行环境,执行上下文,
GO全局对象,存储全局方法,例如settimeout,在浏览器中GO赋值给了window
VO变量对象,存储当前上下文中的变量,
AO活动对象,为vo的一个分支,理解为函数执行形成的变量对象,
scope作用域,创建函数时赋予的,
scopechain 作用域链
吧创建的上下文,压缩到占中执行 进站,
执行完的上下文,没有用了就会出战,
还有用的会把其压缩到栈底,=> 闭包
GO全局对象,在浏览器端会把全局对象赋值给window,
变量赋值的三个步骤,
创建变量声明,
创建值,基本值直接在赞中创建和存储即可,
变量和值关联起来,赋值,定义,defined.
由于引用值是复杂的结构,所以特殊处理,开辟一个存储对象中键值对(存储函数中的代码,)的内存空间,这个空间叫堆内存,
所有的堆内存,都有一个可被后续查找的16进制地址,
后续关联副职的时候是把堆内存地址给予变量操作的,
let x = 10,
y = 20;
=>
let x;
let y;
let x = y = 10
=>
let x;
y;
Yeah.