问题记录

Number.toFixed(n)

数字保留n位小数,

这里需要注意toFixed之后,如果后面保留的小数位最后是0的话,Number类型会变成String


js的数据结构

在js中数据类型一般分类基本数据类型(Number Boolean Null Undefined String Symbol)与引用数据类型(Object Array Function ...),其中栈一般用于存放基本类型数据或者引用类型数据的指针,堆用于存放引用类型数据

image

堆数据结构是一种无序的树状结构,同时它还满足key-value键值对的存储方式;我们只用知道key名,就能通过key查找到对应的value

image

区别例子:

基本类型:

var a = 1;
var b = a;
a = 2;
//b依旧是1
引用类型:
var a = [1,2,3];
var b = a;
a.push(4);
//b与a共用一个数组,a.push(4)后b打印出[1,2,3,4]

队列

队列具有FIFO(First In First Out)先进先出的特性,与栈内存不同的是,栈内存只存在一个出口用于数据进栈出栈;而队列有一个入口与一个出口,在js中使用队列较为突出的就是js执行机制中的event loop事件循环
image
深入理解eventloop :https://www.cnblogs.com/echolun/p/10765562.html
一般用栈来执行同步事件,如果是异步事件则用队列,会判断读取任务队列中的事件然后加入执行栈中(转同步)

js的垃圾回收机制

函数内的局部变量会在执行完函数后,回收不被需要的变量

全局变量则很难判断

垃圾回收的两种模式

引用计数

给变量的引用进行计数,如果计数为0,则表示不需要可以回收

标记清除=> 标记然后清除没标记的

标记清除的概念也好理解,从根部出发看是否能达到某个对象,如果能达到则认定这个对象还被需要,如果无法达到,则释放它,这个过程大致分为三步:

a.垃圾回收器创建roots列表,roots通常是代码中保留引用的全局变量,在js中,我们一般认定全局对象window作为root,也就是所谓的根部。

b.从根部出发检查所有 的roots,所有的children也会被递归检查,能从root到达的都会被标记为active。

c.未被标记为active的数据被认定为不再需要,垃圾回收器开始释放它们。

(window.a window.b  window是root  a,b是roots列表中的变量)




posted @ 2020-03-19 22:31  阴阳师先生  阅读(181)  评论(0编辑  收藏  举报