Values & Reference:值和引用
2017-02-16 09:01
323 查看
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]
相关文章推荐
- C# 引用程序集 面向的是另一个处理器,而不是应用程序 警告 Referenced assembly 'TypeInfo.dll' targets a different processor than the application
- PHP源码分析-变量的引用计数、写时复制(Reference counting & Copy-on-Write)
- Python入门的36个例子 之 23 -> Objects and References —— 复制引用还是复制实体对象
- C++ 参数传递 nonreference parameters & reference parameters 非引用和引用类型
- Java中的原始类型(Primitive Types)与引用类型(Reference Values)
- 错误:_cspr_lp64_iface.c:(.text+0x28): undefined reference to `mkl_blas_cspr'类似未定义引用
- 引用:&(reference)与间接引用:*(dereference)
- [C++语法] 引用(reference) Int& a
- 智能指针里弱引用应该如何实现?(WeakReference/WeakPtr<T>)
- &(取引用 reference)和*(解引用 dereference)在二维数组时候的使用
- [置顶] (柯昌合)内存优化之"软引用" Strong, Soft, Weak, Phantom Reference(柯昌合)
- C#中出现"System.NullReferenceException: 未将对象引用设置到对象的实例"
- 命名空间‘xxxx'中不存在类型或命名空间名称"DBserviceReference"(是否缺少程序集引用?)
- 内存优化之"软引用" Strong, Soft, Weak, Phantom Reference
- 错误:_cspr_lp64_iface.c:(.text+0x28): undefined reference to `mkl_blas_cspr'类似未定义引用 *转载
- SCA概念与应用实践(7.SCA装配模型--7.6服务service & 7.7引用reference)
- 转屏对AsynTask的影响&WeakReference弱引用
- [LinkerScript.12] 符号赋值: 源代码引用- Assigning Values to Symbols: SourceCodeReferenceq边接
- C++引用报错:invalid initialization of non-const reference of type ‘std::string&’ from an rvalue of type
- 关于“System.NullReferenceException: 未将对象引用设置到对象的实例”问题原因。