堆栈和数据储存

一、栈堆的原理

栈区(stack)由操作系统自动分配释放 ,存放函数的参数值,局部变量的某值等等。其操作方式类似于数据结构中的栈。

堆区(heap)一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表

栈的特点:栈是一种数据结构,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。

栈是只能在某一端插入和删除的特殊线性表。用桶堆积物品,先堆进来的压在底下,随后一件一件往堆。取走时,只能从上面一件一件取。堆和取都在顶部进行,底部一般是不动的。

栈就是一种类似桶堆积物品的数据结构,进行删除和插入的一端称栈顶,另一堆称栈底。插入一般称为进栈(PUSH),删除则称为退栈(POP)。 栈也称为后进先出表(LIFO表)


二、数据储存

(1)简单(基本)数据类型:Number、String、Boolean、Undefined、Null,简单数据类型:在栈内直接存储值。结果还是10086因为把c的值给b时是简单的复制了一份,c和b可以单独操作不相互影响。

function a(b){

    b = 10010;

}

var c = 10086;

a(c);

console.log(c);

(2)复杂(引用)数据类型: Object、Array、Date、function等,复杂数据类型:在栈内存储引用。因为复杂数据类型赋值是把栈中对象的地址赋给变量,函数内外两个变量指向同一个对象,所以只要对象的属性值改变,两个变量值都会改变

function Person(name){

    this.name=name;

}

var s1 = new Person(18);

function index(s){

    s.name = "在这里";

}

index(s1);

console.log(s1.name);

function Person(name){

    this.name = name;

    this.logName = function() {

        console.log(this.name);

    }

}

var p1 = new Person('张三');

var p2 = new Person('李四');

p1.logName();

p2.logName();


三、可以通过以下的链接去运行代码

http://latentflip.com/loupe/?code=JC5vbignYnV0dG9uJywgJ2NsaWNrJywgZnVuY3Rpb24gb25DbGljaygpIHsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gdGltZXIoKSB7CiAgICAgICAgY29uc29sZS5sb2coJ3dvIScpOyAgICAKICAgIH0sIDIwMDApOwp9KTsKCmNvbnNvbGUubG9nKCJIaSEiKTsKCnNldFRpbWVvdXQoZnVuY3Rpb24gdGltZW91dCgpIHsKICAgIGNvbnNvbGUubG9nKCJDbGljayB0aGUgYnV0dG9uISIpOwp9LCA1MDAwKTsKCmNvbnNvbGUubG9nKCJXZWxjb21lIHRvIGxvdXBlLiIpOw%3D%3D!!!PGJ1dHRvbj5DbGljayBtZSE8L2J1dHRvbj4%3D

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容