复习递归和拷贝案例

//递归就是函数自己调用自己
			//递归的重要因子,递归的结束条件
			function say(n){
				if(n==0){return}//当n = 0 的时候递归结束
				alert("你好")
				n--;//让n--
				say(n);
			}
			say(5);
//不用for循环求出1-3的和
			function sum(n){
				if(n==1){return 1};
				return n + sum(n-1);
			}
			alert(sum(3));
			//第一次 return 3+sum(2)
			//第二次 return 2+sum(1)
			//第三次 return 1
			//				3+2+1
//求一个斐波那契数列
			//1,1,2,3,5,8,13,21...
			//前面两个数是第三个数的和
			function getFib(n){
				if(n==1||n==2){return 1}
				else{
					return getFib(n-1)+getFib(n-2)
				}
			}
			
			getFib(30);
// 深拷贝
			var obj = {
				name:"mumu",
				age:18,
				arr:[2,4,6,8],
				job:{slary:150,time:8,workers:["zql","曾庆林"]},
				say(){alert(this.name)}
			}
			// 浅拷贝
			// var obj2  = Object.assign({},obj)
			//               浅拷贝对象(源,目标,目标2,。..)
			function deepCopy(obj){
				// 判断对象类型,如果是数组,如果是对象,要进行递归
				var type = typeof obj; 
				if(type=="object"){//引用类型对象
					var result ;					
					if(Array.isArray(obj)){ //如果是一个数组
						result= [];//声明result是一个数组
						for(var i=0;i<obj.length;i++){ //for循环遍历数组
							result[i] = deepCopy(obj[i]); //递归拷贝
						}
						
					}else{
						result = {};
						for( var k in obj){ //for in 遍历 
							result[k] = deepCopy(obj[k]) //递归拷贝
						}
					}
					return result;
				}else{// 值类型对象 直接返回					
					return obj; 
				}
			}
			var obj2 = deepCopy(obj);
			var obj5 = JSON.parse(JSON.stringify(obj))
			// json字符对象类型  Number  Boolean  String Array  Object  null

猜你喜欢

转载自blog.csdn.net/cj521zhihui/article/details/108833229