我们都知道在 ECMAScript 中,数据类型分为原始类型(又称值类型/基本类型)和引用类型(又称对象类型);这里我将按照这两种类型分别对函数进行传参,看一下到底发生了什么。
参数的理解
首先,我们要对函数的参数有一个了解:
形参就是函数内部定义的局部变量;
实参向形参传递值的时候,就是一个赋值操作,把实参的值直接复制一份给形参。
原始类型参数传递
示例1
var a = 1; function f(b) {
a = 3;
} f(a); console.info(a); // 3
示例1中的代码比较简单,解析如下:
- 首先,我们定义了一个变量 a,给它赋值为 1;又定义了一个函数 f,函数 f 的形参是 b(此时,相当于在函数 f 里定义了一个变量 var b; 它的值现在是 undefined);
- 调用函数 f(a)把 a 作为实参传入。这里可以理解为,给 b 进行了一次赋值操作 b = 1;
- 接下来继续执行代码 a = 3;注意:在函数体里边,出现了一个变量 a ,但是它没有用 var 关键字定义,所以,它是一个全局作用域的变量,不是这个函数的局部变量,而在一开始,我们就定义了这样一个变量 a,所以在这里就是对之前的 a 进行的又一次赋值操作,把 a 从之前的 1 变成了 3;
- 执行完 f(a) 之后,把全局变量 a 的值改变了,所以,当我们输出 a 查看它的值时,就得到了 3 ,而对于函数的形参 b 根本没有进行任何操作而已。
示例2
var a = 1; function f(a) {

