JavaScript中函数参数传值

128 阅读1分钟

访问变量的方式

    1. 按值(基本类型:string、number、boolean 存放在栈内存中)
    1. 按引用(引用类型:Object 存放在堆内存中)

参数传值

所有的函数的参数都是按值传递。 换句话说,所有参数都是将传进来的值进行了copy。参数实际上是函数的局部变量,在调用函数传参时,就是将值向参数进行复制。

基本类型的复制

基本类型的复制:基本类型存在栈内存中,复制时,就是直接在栈内存新开辟出空间,将复制的值放进去;变量指针指向的是不同的内存地址。如下

 var number = 1
 var number2 = number

image.png

引用类型的复制

引用类型的复制:引用类型的对象存在堆内存中,栈中存放的是对象在堆内存中的地址,在进行复制时,其实和基本类型的复制一样,区别是,在此复制的是内存地址。所以,值复制后,两个变量的值都是同一个内存地址。

var obj1 = new Object();

var obj2 = obj1;

obj1.name = "Nicholas";

alert(obj2.name);//'Nicholas'

image.png

对于为啥不是按引用传值,大家可以测试下,在函数内部去改变参数的指向,会发现函数外的值的指向并没有变

function setName(obj) {

obj.name = "Nicholas";

//改变参数的指向
obj = new Object();

obj.name = "Greg";

}

var person = new Object();

setName(person);

alert(person.name); //"Nicholas"