执行JS代码之前的准备工作
- 提供 API: window I document / setTimeout
- 没错,上面这些东西都不是 JS 自身具备的功能(是浏览器)
- 我们将这些功能称为运行环境 runtime env
-
内存分配图
红色区域
作用
红色专门用来存放数据,目前只研究该区域
- 红色区域并不存变量名,变量名在「不知什么区
- 每种浏览器的分配规则并不一样上图的区域并不完整
-
Stack 和 Heap
红色区域分为 Stack 栈和 Heap 堆
- Stack 区特点:每个数据顺序存放
-
注意
数据分两种:非对象(数字、布尔、字符串)和对象(数组、函数)
- 非对象都存在 Stack 对象都存在 Heap
- = 号总是会把右边的东西复制到左边(不存在什么传值和传址)
window
在执行JS代码之前就有了window
⚠️var person = {} 等价于 var person = new Object ()
⚠️var a= [1,2,3] 等价于 var a = new Array (1,2,3)
⚠️function f () {} 等价于 var f= new Function ()
问:为什么有 var a= [],还要提供 var a = new Array()呢?
答:因为后者是正规写法,但是没人用。前者不正规,但是好用啊。
window的内存图
更简单的画法
规律:一般首字母大写(Object、Array)的会有prototype属性
注意
关于 window
- window 变量和 window 对象是两个东西
- window 变量是一个容器,存放 window 对象的地址
- window 对象是 Heap 里的一坨数据
- 不信的话,可以让 var X = window,那么这个 X 就指向了 window 对象,window 变量可以去死了
- 但是这样的代码会弄晕新手,所以不要这样写
同理
- console 和 console 对象不是同一个东西
- Object 和 Object 函数对象不是同一个东西
- 前者是内存地址,后者是一坨内存