在函数调用中,传递一个数值时,我们称为“值传递”。
在函数调用中,传递的是对象时,我们一般称为“引用传递”
这两者的本质区别是:传递的数据类型不一样,值传递的是一个数值,而引用传递传递的是一个对象。
function fn(a){
a++;
} ;
console.log(a);
这个很明显会报错,因为没有创建变量a
var a = 6;
function fn(a){
a++;
}
console.log(a);
这个结果 a 为 6 ,因为并没有调用函数 fn 所以函数找不到a ,a++ 并没有执行;
值传递
var a = 6;
function fn(a){
a++;
};
fn(6);
console.log(a);
这个结果 a 为 6, 因为这个fn 执行后把 参数6传给了 函数里边的 a ,在函数内部开辟了一个空间 a = 6 ,然后经过a++; a 为 7 , 但结果并不会改变函数外面的 a 的值 ,所以结果还是 为6 .
在函数调用中,传递数值,我们成为“值传递”,
值传递特点:因为值传递的数据,地址和值是一个内容,所以在拷贝之后,改变新的,不会影响老的。
引用传递
var a = 6;
function fn(){
a++;
};
fn(6);
console.log(a);
这个结果为7,因为这个fn执行后把参数6 传给了函数 fn 但是函数fn 里并没有接受这个参数的 形参, 这是函数内部并没有 a 的空间 ,所以会自动向外面搜索 找到a 的值 这时 是对外部 a 的修改,所以会改变 a 的值。
引用传递的特点:因为引用传递的数据,地址和值是两部分内容,所以在默认拷贝之后,仅仅拷贝了地址,没有拷贝值,此时两个地址指向了同一个值,那么就会造成修改新的,会影响老的,因为只有一个值。