首页 > 网站 > WEB开发 > 正文

关于对象引用的作用域

2024-04-27 14:23:41
字体:
来源:转载
供稿:网友

关于对象引用的作用域

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}
  1. hat:"b"
  2. mouse:function (){var b="2222"}
  3. __PRoto__:Object
function (){var b="1111"} Object{mouse:function,hat:"b"}
  1. hat:"b"
  2. mouse:function (){var b="2222"}
  3. __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


上一篇:JavaScript错误处理

下一篇:js 导出Excel

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表