关于对象引用的作用域

王朝学院·作者佚名  2016-05-23
窄屏简体版  字體: 小  |  中  |  大  |  超大  

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

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航