一、栈堆的原理
栈区(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