zoukankan      html  css  js  c++  java
  • 关于对象引用的作用域

     

    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

  • 相关阅读:
    CentOS查看CPU信息、位数、多核信息
    Linux常用命令大全
    chmod命令详细用法
    tar命令的详细解释
    yum和rpm命令详解
    LeetCode 241. Different Ways to Add Parentheses
    LeetCode 139. Word Break
    LeetCode 201. Bitwise AND of Numbers Range
    LeetCode 486. Predict the Winner
    LeetCode 17. Letter Combinations of a Phone Number
  • 原文地址:https://www.cnblogs.com/danghuijian/p/3748483.html
Copyright © 2011-2022 走看看