最近看到前端的面试题,是 关于深度克隆还有浅度克隆的
JavaScript按值传递和按引用传递:
JavaScript的基本类型一共五种包括(undefined,Null,boolean,Number,String)这几种都是按照值传递;
还有引用类型(数组和对象)按址传递,引用类型在值传递的时候是传递的地址,也就是说的按引用传递,对于引用传给函数的是变量的地址,
传进去的时候这时候就相当于有了一个变量的地址的拷贝,如果对这个拷贝重新赋值的话,是对原变量没有影响的,但是如果直接对传进去的变量(引用类型)直接操作的话就对外部的变量也会想用的改变;
说的简单一点就是基本类型传进去的是
变量的拷贝,引用类型传进去的是
变量的地址;
但是这两种传递方式实质是一样的:
先看第一个代码:
var a=[],
b={},
c={};
function foo(a,b,c){
var v1 = Array (1),
v2 = [2,2],
v3 = {"x":2};
}
foo(a,b,c);
console.log(a);
console.log(b);
console.log(c);
这样虽然传进去的是引用类型,但是对变量地址拷贝进行的改变,这样就和原来的引用没有关系了;
,看下面这个代码
var a = {'a':1};
var b = a;
b.b = 2;
if(a === b){
console.log(b);
console.log(a);
}
这样修改b的值a会改变;
看下面代码:
var v1