递归和定时器 学习总结
最近学的有点乱 - -
封面画师:唏嘘的星辰 p站ID:13312138
递归
递归
自己调用自己,需要在合适地方跳出方法 return进行跳出
function f1(n){
console.log(n,"------") // 3 2 1 0
// f1(3) //递归调用
if(n>0){
f1(n-1) //f1(2) f1(1) f1(0)
}
console.log(n,"++++++++") // 0 1 2 3
}
f1(3)
// 第25位数是多少 斐波那契数列
// 1 1 2 3 5 8 13 21...
function f2(n){
if(n<3){
return 1
}
return f2(n-1) + f2(n-2)
}
console.log(f2(40))
/* 5
f2(4)+f2(3)=f2(3)+f2(2)+f2(3)
= f2(2)+f2(1)+1+f2(2)+f2(1)
=1+1 +1 + 1+ 1 = 5
*/
// 9!=1 * 2 *3*...9
// n的阶乘 9!= 9*8!=9 * 8 *7!
function f3(n){
if(n==1){
return 1
}
// arguments.callee() 不使用函数名自己调用自己
return n * arguments.callee(n-1)
}
console.log(f3(9))
// 4!
// 4* f3(3)=4*3*f3(2)=4*3*2*f3(1)=4*3*2*1
定时器
定时器 每隔一段时间执行一个方法
参数1: 回调函数
参数2: 时间 以ms为单位setInterval
属于异步执行:不会影响后续代码的执行,不会阻塞代码的
var count = 1
var left1 = 0
setInterval(function(){
// 改背景颜色
// var a = Math.random()*255
// var b = Math.random()*255
// var c = Math.random()*255
// d1.style.backgroundColor=`rgb(${a},${b},${c})`
// 修改背景图片
// d1.style.backgroundImage = `url(${count}.webp)`
// count++
// if(count>=3){
// count = 1
// }
// 修改位置平移
left1 = left1 + 10
d1.style.left = left1 + 'px'
},16.67)
// 浏览器刷新频率是1s 60帧, 一帧的时间 1000/60 = 16.67ms
// for属于同步任务,会阻塞代码执行
// for(var i = 0;i<10000;i++){
// console.log("222222")
// }
// console.log("33333")