//递归就是函数自己调用自己
//递归的重要因子,递归的结束条件
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