js stack and heap(js栈和堆)

先看一段代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>object</title>

</head>
<body>

<script type="text/javascript">
    function setName(obj) {
obj.name = 'Nicholas';
obj = new Object();
obj.name = 'Greg';
}
var obj = new Object();
setName(obj);
alert(obj.name); //”Nicholas” 
</script>
</body>
</html>
输出是什么呢?


Nicholas;


这里有个概念,栈和堆,栈是用来存值得,堆是用来存引用的,可以这么说么?栈里面值的复制是会覆盖的,但是堆呢,堆里面对象的复制,是用指针来说的,

也就是说,堆的复制,都是指向的同一个对象,不过这是指向这个对象的地址不同而已。


那么接着来说上面的例子,new Object产生了一个对象,然后又new Object产生了一个对象,这两个对象是同一个对象吗,会是同一个对象吗,不是的,虽然变量的名称(obj)一样,但这两个对象不是同一个,所以对两个对象的赋值和操作都是互不干扰的。


你可能感兴趣的:(object)