JS内存瓜分 和 原型链
操作系统常识
Operating System 操作系统 runtime 运行时 kermel 内核 compile 编译
environment 环境 persion 一个人 people 一群人 memory 记忆/存储
开机程序
- 操作系统在C盘
- 开机按钮 通电后 开始读取固件
- 固件就是固定在主板上的存储设备 里面有开机程序
- 开机程序将文件里面的操作系统加载到内存中运行
操作系统
- 加载操作系统
- 启动初始化进程 每个进程都有自己的编号
- 启动系统服务 :文件 安全 联网
- 等待用户登录
- 运行shell 图形化界面可以认为是另一种Shell
浏览器的功能
- 发起请求,下 载HTML,解析HTML,下载 CSS,解析CSS,渲染界面,下载 JS,解析JS,执行JS等
- 功能模块:用户界面、渲染引擎、JS引擎、存储等(JS是单线程)
- 上面功能模块一般各 处于不同的线程(比进程更小)
- 如果进程是车间,那么线程就是车间里的流水线
JS引擎
主要功能
- 编译:把JS代码翻译为机器能执行的字节码或机器码
- 优化:改写代码,使其更高效
- 执行:执行上面的字节码或者机器码
- 垃圾回收:把JS用完的内存回收,方便之后再次使用
瓜分内存(不完整)
OS一个区域
chrome 是一个进程
JS 一部分存代码 在不知道什么区里面 ,这个区是将环境存在这个去里面 同时还有变量名。例如 var a 。
红色区不存变量名
stack是栈区 这里放数据 每个数据顺序存放 非对象都存在Stack
heap堆区 这里放数据 每个数据随机存放 对象都存在heap
var a= 1
var b= a
var p = {name:'frank', child:{name:'jack'}}
var p2 = p
数据分两种:非对象和对象(数组是对象 函数是对象 )(数字 布尔 字符串 都不是对象)
非对象都存在Stack
对象都存在Heap
=号总是会把右边的东西复制到左边(不存在什么传值和传址)
关于window
window变量和window对象是两个东西
window变量是一个容器,存放window对象的地址
window对象是Heap里的一坨数据
不信的话,可以让var X=window,那么这个X就指向了window对象,window变量可以不用了
但是这样的代码会弄晕新手,所以不要这样写
同理
console和console对象不是同一个东西
Object和Object函数对象不是同一-个东西
前者是内存地址,后者是一坨内存
JS原型链
引一篇文章,里面说的比较透彻:点击这里
下面所有的--proto-- 都是
__proto__
首先我们要先知道 函数是对象的一种
- --proto--、 constructor属性是对象所独有的;
- prototype属性是函数独有的;
- 上面说过js中函数也是对象的一种,那么函数同样也有属性proto、 constructor;
这里引出一个例子,这个在JS中是不会报错的
var obj = {}
obj.toString()
var a = [1,2,3]
我们不妨画一个内存图出来看一下:
obj 和 arr 都有一个隐藏属性 --proto--
--proto-- 隐藏属性存储了Array.prototype对象的地址
arr.keys发现arr上没有 keys
就去隐藏属性对应的对象里面找
于是就找到了Array.prototype.keys
a.keys === window.Array.prototype.keys
//这里在控制带得出 true
同理 obj.toString 也是上面的原理
--proto-- 隐藏属性存储了Object.prototype对象的地址
obj 变量指向一个空对象,这个空对象有个 --proto-- 属性指向 window.Object.prototype。
obj.toString()在调用的时候,本身没有toString 就回去 obj.--proto-- 里面去找
也即是下面的代码的意思
obj.toString === window.Object.prototype.toString
//这里在控制带得出 true
XXX.prototype存储了XXX对象的共同属性 共同属性就是原型
--proto-- 就是原型 原型让你无需重复声明共有属性(省内存,省代码)
var obj = {}
// 输出
obj //有个隐藏属性
var array = []
// 输出
array //有个隐藏属性
小贴士
一层是可以篡改的 二层是不会被篡改
我们只关心小写属性的隐藏对象 不关心首字母大写的隐藏属性
原型链图
在上图我们可以得出结论:万物继承自Object.prototype。
资料来源:饥人谷
本文为贰贰的原创文章,著作权归本人和饥人谷所有,转载务必注明来源
转载自:https://juejin.cn/post/6925653542804029453