先看一段代码:
<!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)一样,但这两个对象不是同一个,所以对两个对象的赋值和操作都是互不干扰的。