深刻理解javascript系列(一):从三种数据结构开始

    在Javascript中,有三种经常使用的数据结构是咱们必须了解的。它们分别是栈(stack)、堆(heap)、队列(queue)。它们是咱们理解javascript核心的基础。栈、堆、队列对应不一样的应用场景。
javascript

1.1  栈

    当咱们遇到栈的时候,可能会是不一样的栈。什么意思了?咱们先必须理清不一样应用场景下的栈。java

    场景1:栈是一种数据结构,表示的是数据的一种存储方式,这是一种理论基础。数组

    场景2:栈是可用来规定代码的执行顺序,在javascript中叫作函数调用栈(call stack),他是根据栈数据结论理论的一种实践。bash

    场景3:栈表达的是一种数据在内存中的存储区域,一般叫作做栈区。可是javascript并无想别语言那样区分栈区和堆区。所以这里不作扩展。咱们能够简单粗暴的认为在javascript中,全部的数据都是存放在堆内存空间中的。数据结构

    这里须要咱们理解栈这种数据结构的原理和特色,学习它的最终目的是掌握函数调用栈的运行方式。下面咱们经过兵乓球盒这个案例来放便理解栈的存取方式。函数


    如图所示,兵乓球盒中依次放入兵乓球,当咱们想取出兵乓球时,必须从顶部一个一个的拿出,直到取到咱们第一个放入的兵乓球。oop

    这种状况与栈的数据结构一模一样。这中存取方式能够总结为“先进后出,后进先出(LIFO,Last In,First Out)"。如图中的,出于栈顶的true,最后进栈,最早出栈。1在栈底,最早进的栈,但只能最后出栈。学习

   在javascript中,数组(Array)提供了两个栈方法来对应这种存取方式。spa

   push:向数组末尾添加元素(进栈方法)code

    push方法能够接收任意参数,并把他们逐个添加到数组的末尾,并放回数组的长度。

var a = [];
a.push(1);            //a:[1]
a.push(2,3,4);        //a:[1,2,3,4]
var l = a.push(5)     //a:[1.2.3.4.5]     l:5复制代码

    pop:弹出数组末尾的一个元素

    pop删除数组末尾的一个元素,并返回。

var a = [1,2,3];
a.pop();    //a:[1,2]
a.pop()的返回结果为3复制代码

1.2  堆

堆数据是一种树形结构

他的存取方式与从书架中取书类似。书齐地摆放在书架上,咱们只要清除咱们要在哪本书(知道书名)就能准确的找到咱们想要的书。咱们不用关系书的摆放顺序,即不用想兵乓球盒那样,必须将一些兵乓球取出来才能拿到咱们想拿到的。

由于GC的存在,因此JavaScript中没法直接用堆的方式申请内存(相似的状况在Java中也存在),可是咱们能够参考JSON格式的数据,或者数组对象,咱们存储的key-value能够是无序的,由于顺序的不一样并不影响咱们的使用,咱们只须要关心书的名字。咱们操做的都栈的对象。

1.3  队列

在javascript中,理解队列数据结构的目的是为了搞清楚事件循环(Event Loop)机制到底怎么回事。以后的系列会讲事件循环。

队列(queue)是一种先进先出的(FIFO)数据结构。正如排队过安检同样,排在队伍前面的人必定是最早过安检的人。原理如图:


记住:兵乓球盒(栈)、书架取书(堆)、排队进站(队列)

相关文章
相关标签/搜索