浏览器执行JS代码的过程
浏览器想要执行JS代码,要经过这些步骤:
let a=12;
let b=1;
b=13;
console.log(a);
- 从浏览器中分配出一块栈内存(stack),用来执行js代码
- 浏览器分配出一个主线程用来自上而下执行js代码
- 创建变量a,放到当前栈内存的变量存储区域中
- 创建一个值12,把他放到当前栈内存的值区域中(简单的基本类型值都是这样村的,复杂的引用类型是存储的地址)
- 赋值,让a和12关联起来
- 创建b变量,让b和12的值关联
- b=13创建值13让b和13关联
简单值和复杂值的存储
基本类型按值操作,所以又叫值类型。引用类型按引用地址操作,所以叫引用类型
简单值的存储
简单值就是基本类型值,就是像上面一样直接在栈内存中开辟出一块值存储空间来存储
复杂值的存储
- 首先定义一个变量a存储在变量存储区域
- 在内存中分配出一块新内存用来存储引用类型值(堆内存,heap),内存中有一个16进制地址
- 把对象中的键值对存储在堆内存中
- 把变量a 和对象的键值对关联起来
- 依次执行代码 # 基本类型的值操作
练习题
let n=[10,20];
let m=n;
let x=m;
m[0]=100;
x=[30,40];
x[0]=200;
m=x;
m[1]=300;
n[2]=400;
console.log(n,m,x);//=> [100, 20, 400] , [200, 300] ,[200, 300]
let a={
n:1
};
let b=a;
a.x=a={
n:2
}
console.log(a.x);//=>undefined
console.log(b);//=>{n:1,x:{n:2}}
console.log(a);//=>{n:2}
var a='abc'+123+456;
var b='456'-'123';
var c=100+true+21.2+null+undefined+"tencent"+[]+null+9+false;
console.log(a)//=>'abc123456'
console.log(b)//=>333
console.log(c)//NaNtencentnull9false