关于对象引用的作用域
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)
对象赋值后,指向了同一个对象,及时改变的是第二个对象,第一个对象也跟着变。
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