传递参数
我们知道,函数是通过形式参数接收外部传递进来的变量,并且参数都是按值进行传递的。
传递的参数,一般有两种类型的,即原始值和引用值。
我们会陷入一个思想:按照值传递的,就是值传递,按照引用传递的,就是引用传递。
下面是三个案例,分别看下:
- 参数是基本类型
const add=(num)=>{
return num+1;
}
let num=10;
let result=add(num);
console.log(num,result)
上面这个代码大家很容易理解,全局作用域中的变量num的值并没有被改变。
2. 参数是引用类型
let a={name:'xiaoming',age:12}
const fun=(a)=>{a.name='xiaotang';return a}
let b=fun(a)
console.log(a,b);
上面的代码中输出的a和b中name值全部为xiaotang。这可能会被理解为是引用值传递
- 添加代码版本
function setName(obj) {
obj.name="oldName";
obj=new Object();
obj.name="newName";
}
let obj1=new Object();
setName(obj1);
以上代码会输出oldName
,说明及时传入的是对象,那么也是按照值传递的。否则代码会输出newName
。方法中下面的两行代码,虽然重新创建了一个对象,但是在函数执行完以后,就消失了。
所以传递参数都是值类型的