一、函数回调

1.把函数的指针,当做函数的参数来调用。调用参数的时候,相当于调用函数。这就是函数的回调

math函数传入cc与dd参数

function math (num1,num2,fun) {
return fun(num1,num2)
}

math(1,2,cc)
math(2,3,dd)
function bb (num1,num2) {
return (num1+num2)*2-1
}
function cc (num1,num2) {
return (num1-num2)*2-1
}
math(3,4,cc)
function cc () {
}

2.通过匿名的调用

上面是调用函数的指针,直接用匿名函数代替。

math(2,3,function  (num1,num2) {
return (num1+num2)*3-1
})

3.定义和执行同时进行

括号的两个作用1,优先级运算。2.运行函数

((function aa (num1,num2,fun) {
return fun(num1,num2)
})(2,3,function (num1,num2) {
return (num1+num2)*2
}))

所有的事件函数都可以传入event参数方便处理事件。(event object) 对象,内置的回调函数接口

$("p").click(function(event){  
alert(event.type); //"click"
});

(evnet object)属性方法:
event.pageX   //事件发生时,鼠标距离网页左上角的水平距离
event.pageY   //事件发生时,鼠标距离网页左上角的垂直距离
event.type   //事件的类型
event.which   //按下了哪一个键
event.data   //在事件对象上绑定数据,然后传入事件处理函数
event.target  //事件针对的网页元素
event.preventDefault()  //阻止事件的默认行为(比如点击链接,会自动打开新页面)
event.stopPropagation() //停止事件向上层元素冒泡

二、递归

递归就是方法自己调用自己

实现递归的三要素

1.方法中出现自己调用自己

2.要有分支

3.要有结束条件

非递归求阶乘

static long notDigui(int n){
long result=1;
for(int i=1;i<=n;i++){
result=result*i;
}
return result;
}

递归方法求阶乘

static long digui(int n){
if(n==1){
return 1;
}
return n*digui(n-1);
}

public static void main(String[] args) {
System.out.println(Demo03.notDigui(5)); // 1*2*3*4*5
System.out.println(Demo03.digui(5));
}
function bb (num) {
if(num==1){
return num;
}else{
return num*bb(--num)
}

}

bb(4)
4*3*2*1

对于for或者while循环,只是将重复的步骤利用循环来处理,循环处理完一个步骤后,又进行下一个类似的步骤,关键点是要找出循环的依据和各步骤的相同点(既要循环的部分),什么情况下要继续循环,什么情况下要终止循环。

while循环

public int sumByMax(int max){
int result=0;
while(max>=1){
result+=max;
max--;
}
return result;
}

递归

public int sumByMax(int max){
if(max>=2){
return max+sumByMax(max-1);
}else{
return max;
}
}

使用递归时,需先找出重复步骤之间的相同逻辑,然后将这些逻辑实现在一个方法中。 
递归是在进行一个步骤,进行到某处时,通过调用自身进行分层,在下一层开始紧接着的下一个步骤, 
如果下一层不是定义的最后一层,则会在相同的地方再次分层,直到进入最底层,如上例中,max如果 
为5,在进行max为5的这一层操作时,将会运行addByMax(4),分层,下一层的max将为4,此时因为定义了max为1时 
才为最底层,所以会继续分层,这时max为3,再分,为2,再分,为1,到达最底层,然后 
从最底层开始将各层的结果一次向上传递,回归到最顶层,返回最终结果,形成上一层调用下一层,比如此例中的 max+addByMax(max-1) 。
最后注意定义一个最底层,即开始向上回归结果的那一层,最底层将不再调用自身进行递归