对象引用
var a = 5; var b = a; b+=3; alert(b);//8 alert(a);//5
基本类型之间是赋值关系.
对象和函数都是引用的关系.
var a = [1,2,3]; var b = a; b.push(4); alert(b);//1,2,3,4 alert(a);//1,2,3,4
var a = [1,2,3]; var b = a; b=[1,2,3,4];//相当于重新创建了一个b alert(b);//1,2,3,4 alert(a);//1,2,3
var obj ={ a:10 }; var obj2 = obj; obj2.a = 20; alert(obj.a);//20
var obj ={ a:10 }; function copy(obj){//浅拷贝 var newObj = {}; for(var attr in obj){ newObj[attr] = obj[attr]; } return newObj; } var obj2 = copy(obj); obj2.a = 20; alert(obj.a);//10
注:简单说:for in 和for of 的区别;
for in 遍历的是键名,for of遍历的是键值.
简单记: i 在字母表排在o 前面 ;
遍历时 a:10; 于是in对应a,of对应10;故记住.
递归:
1.函数调用函数自身.执行递的动作.
2.最后一次判断一个终止条件,可以执行归的动作.
var obj ={ a:{b:10} }; function deepCopy(obj){ if(typeof obj != 'object'){ return obj; } var newObj = {}; for(var attr in obj){ newObj[attr]=deepCopy(obj[attr]); } return newObj; } var obj2 = deepCopy(obj); obj2.a.b = 20; alert(obj.a.b);//10