关于对象引用的作用域

 

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 {mousefunction}
  1. hat"b"
  2. mousefunction (){var b="2222"}
  3. __proto__Object

function (){var b="1111"}
 
Object {mousefunctionhat"b"}
  1. hat"b"
  2. mousefunction (){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

原文地址:https://www.cnblogs.com/danghuijian/p/3748483.html