title: JS对象(2)值传递与引用传递
date: 2016-10-05
tags: JavaScript


0x00 数据类型与数据结构

我们需要先回忆一下。

JavaScript 是一种弱类型或者说动态语言。这意味着你不用提前声明变量的类型,在程序运行过程中,类型会被自动确定。

此外,最新的 ECMAScript 标准定义了7中数据类型:

6种 原始类型: Boolean, Null, Undefined, Number, Stirng, Symbol

一种复杂类型(引用类型)对象: Object.

JavaScript 一切皆对象(除了6中原始类型)

在 JS 中,所有除 Object 以为的类型都是不可变的。比如,JS 中字符串是不可变的,任何对字符串的操作一定返回了一个新字符串,原始字符串并没有被改变。


0x02 值传递与引用传递

通过上述的理解要明白 Javascript 中值传递与引用传递就太简单了,下面的两个超级简单的 demo 可以诠释一切。

// 值传递
var a = 2;
function foo(b){
    b +=10;        
}
foo(a)
console.log(a) 
//  2
// 原始 a 的值没有发生改变

值传递:

  • 只将值进行传递,与原变量无关,值会被复制一份,保存在内存中另一个不同的位置。

  • 当我们修改传递后的值时,修改的是内存中新的位置,而原变量不会被影响,还是原来的值。

  • 这种情况往往出现在6中原始类型中。

//引用传递
var a = [2];
function foo(b){
    b.push(10)    
}
foo(a)
console.log(a) 
//  [2, 10]
// 原始 a 的值被改变了

引用传递:

  • 将内存地址进行传递,相当于把原变量完整的传递过来。

  • 当我们修改传递后的值时,修改的是内存中原来的位置,会对原变量造成影响。

  • 这种情况往往出现在对象上。

利用引用传递的特性,我们有了实现面向对象的基础


曼路
108 声望4 粉丝

宇宙一隅,活捉一只程序猿