关于对象引用的作用域

 

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

你可能感兴趣的:(作用域)