关于对象引用的作用域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