• 关于对象引用的作用域


     

    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

  • 相关阅读:
    C++ 小心你的析构函数不会执行
    sqlserver同步服务报错和链接服务器总结
    第37周星期5小结
    代码审核学到的两个delphi内存泄漏问题
    第36周星期四小结如何测试sql服务是否安装并正常运行
    第37周星期日
    第37周星期六几篇文摘
    第36周星期五小结
    第37周星期一小结
    2012年第37周星期三小结
  • 原文地址:https://www.cnblogs.com/danghuijian/p/3748483.html
Copyright © 2020-2023  润新知