JS数据渲染机制及堆栈内存

1.BODY中编写的都是HTML标签,JS很多时候需要操作这些元素,首先我们要保证元素加载成功,才可以在JS中获取到,所 以我们通常会把JS放在BODY的末尾。

2. js代码放在head里并且套在window.onload里时就和放在body的末尾效果一样

3. Script标签的async和defer:

Defer:开启新的线程下载脚本,使HTML解析完成后执行。如果多个脚本同时生命defer,会按顺序下载和执行,同时会在DOMContentLoaded和load之前执行。意思就是如果HTML解析完成了,脚本还没加载完成,那么一定会等脚本加载完成了才触发DOMContentLoaded。(网上有说defer也不一定按顺序,这个不知道什么情况下不按顺序)

Async:H5新增属性,也是用于异步加载脚本,下载完毕立即执行。有多个脚本使用async的时候,不能保证顺序,如果脚本直接有依赖,是不能使用这个属性。Async会在load之前执行,但是不保证和DOMContentLoaded的执行顺序。

4.栈内存:作用域

(1).提供一个供JS自上而下执行的环境(代码都是在栈中执行的)
(2)由于基本数据类型值比较简单,他们都是直接在栈内存中开辟一个位置,把值直接存储进去的
=>当栈内存被销毁,存储的那些基本值也都跟着销毁了

5.堆内存:引用值对应的空间

1.存储引用类型的值的(对象:键值对 函数:代码字符串)
=>当前堆内存释放销毁,那么这个引用值彻底没了
=>堆内存的释放:当堆内存没有被任何的变量或者其他东西所占用,浏览器会在空闲的时候,自主的进行内存回收,把所有不被占用的堆内存销毁掉(这是webkit内核浏览器的回收机制)

xxx=null 通过空对象指针null可以让原始变量(或者其他东西)谁都不指向,那么原有被占用的堆内存就没有被占用了,浏览器会销毁它。

你可能感兴趣的:(js)