zoukankan      html  css  js  c++  java
  • Values & Reference:值和引用

    var a = 2;
    var b = a;  //b 是 a 的值的一个副本
    
    b++;
    
    a;  //2
    b;  //3
    
    var c = [1, 2, 3];
    var d = c;  // d 是 值[1, 2, 3]的一个引用
    
    d.push(4);
    
    c;  // [1, 2, 3, 4]
    d;  // [1, 2, 3, 4]
    
    d = [4, 5, 6];
    // console.log(c);
    // console.log(d);
    
    // 基本类型值( 包括 null、undefined、字符串、数字、布尔和 ES6中的 symbol )都是通过值复制来传递/赋值,而对象(包括数组和封装对象)则是通过引用复制的方式来传递/赋值。
    // 由于引用指向的是值本身而非变量, 刚开始c、d 都指向值[1, 2, 3],请注意它们仅仅是指向值,并不是持有,当其中一个对值进行更改(如 .push(4)),
    // 另外一个指向的就是更改后的新值[1, 2, 3, 4],所以一个引用无法改变另一个引用的指向。故当其中一个引用指向了其他值(如 = [4, 5, 6]),另一个引用的指向值不会变,
    // 还是 [1, 2, 3, 4] (除非 d 不是指向数组的引用,而是指向 c 的指针,但在 JavaScript 中不存在这种情况)。
    
    function foo(x) {
      x.push(5);
      x;  // [1, 2, 3, 4, 5]
      
      x = [5, 6];
      x.push(7);
      x;  // [5, 6, 7]
    }
    
    foo(c);
    
    c;  // [1, 2, 3, 4, 5]
  • 相关阅读:
    Ruby
    WebGL的第二个小程序
    wegGL的第一个小程序
    Node.js介绍
    接口隔离原则(Interface Sepreation Principle)
    参数
    字段/属性
    接口和抽象类
    javascript中的事件
    线性回归算法-4.多元线性回归算法
  • 原文地址:https://www.cnblogs.com/kuangliu/p/6404184.html
Copyright © 2011-2022 走看看