JS的执行流程
JavaScript语言本身是没法运行代码的,必须有解释器,也就是浏览器的内核,才能帮我们解析代码
那么浏览器底层是如何执行JS代码的?
-
首先从电脑中开辟出一块
全局栈内存window
(电脑内存8G/16G/32G),用来执行代码(栈内存
=> Stack) -
然后全局栈内存中有一个主线程,用来自上而下执行JavaScript代码
栈内存里面有三个东西:变量存储空间,值存储空间,代码执行主线程
堆内存用来存放引用数据类型,会产生一个十六位的内存地址,并被内存指针指向,内存指针被变量指向
// 基本数据类型的执行步骤 // 代码执行的顺序是从上往下,从左往右 let a = 12; // 1. 创建一个值为 12,把他放到值存储空间内 // 2. 创建一个变量 a,把他存储在栈内存的变量存储空间内 // 3. 把变量 a 指向 12 这个值 let b = a; // 1. 由于 a 存放的是基本类型值,JS 会把 a 指向的值复制一份新的,把变量 b 指向这个新的值 let n = {name: 'xyb'}; // 1. 开辟一块新的内存,叫做堆内存,专门用来放置引用数据类型,且有自己的16位地址 XXFFAABB // 1. 创建一个变量 n,并指向一个内存指针,这个指针指向创建的堆内存 XXXFFFAABB let m = n; // 1. 创建一个变量 m // 2. 因为 n 里面存储的是引用数据类型,所以 m = n 实际上是吧 m 指向的指针复制了一份 // 3. 把 m 指向这份复制的指针,其实 m 和 n 最后指向的都是同一个内存地址 m.name = '666'; // 1. 把 m 的内存地址指向的堆内存地址里面的 name 的值修改成 '666' consoloe.log(n.name); // 1. 因为 n 和 m 指向的十六位内存地址是同一个,m的值发生了改变,所以 n.name 为 '666'