您的位置:首页 > 其它

关于对象引用的作用域

2014-05-23 19:25 134 查看
var cat ={};
cat.mouse = function(){var b="1111"};
var dog = cat;
console.log(dog);
console.log(dog.mouse);
dog.mouse = function(){var b="2222"};
dog.hat="b";
console.log(cat)

Object {mouse: function}

hat: "b"

mouse: function (){var b="2222"}

__proto__: Object



function (){var b="1111"}


Object {mouse: function, hat: "b"}

hat: "b"

mouse: function (){var b="2222"}

__proto__: Object

对象赋值后,指向了同一个对象,及时改变的是第二个对象,第一个对象也跟着变。

var a="aa";
var b = function (c, d){
c="bb";
}
b(a);
console.log(a);


结果是aa

var a=["aa"];
var b = function (c, d){
for(var i in c){
c[i] ="bb"

}
}
b(a);
console.log(a);


结果是bb

var a=["aa"];
var b = function (c, d){
c=["bb"]
}
b(a);
console.log(a);


结果是aa

直接赋值的是值传递啊,需要对里面的修改,才改变原来的值。

需要注意的是,如果函数用新的一个对象或者数组覆盖这个引用,那么这一修改在外部是不可见的。或者说,对象和数组是用传值的方式来传递的,只不过这个值是一个引用,而不是本身。

字符串类型

前面看了这么多类型,一直都没有介绍字符串类型,它不好直接分为基础类型和引用类型,因为字符串是一种任意的长度,看上去应该是引用类型,可是他却不是对象,所以也不可作为引用类型。

类型
复制
传递
比较
数字传值传值传值
布尔传值传值传值
字符串不可变不可变传值
对象传址传址传址
http://www.cnblogs.com/joe2014/archive/2014/06/28/3813919.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: