一、创建函数的2中方法
1、方法1
function box(num1,num2){ //创建函数的方式1
return num1+num2;
}
2、方法2
var box1 = function(num1,num2){ //创建函数的方式2
return num1+num2;
}
二、函数作为参数传递
<span style="white-space:pre"> </span>function box2(fun,num){ //函数作为参数传递
return fun(num)+num;
}
function box3(num){
return num+100;
}
var num = 12;
alert(box2(box3,num));
三、使用callee方法,配合arguments使用
1、传统的递归方式,使用名字来递归的方式
function box4(num){ //递归调用的方式1
if(num==0){
return 0;
}
return num+box4(num-1);
}
alert(box4(10));
2、使用callee方式
function box5(num){ //采用arguments.callee调用自身,可以避免函数名字变化
if(num==0){
return 0;
}
return num+arguments.callee(num-1);
}
alert(box5(10));
四、length方法
<span style="white-space:pre"> </span>function box6(num1,num2){
}
alert(box6.length); //返回函数参数的个数
五、使用call和apply方法
1、call可以用来改变对象的中的this
function add(a,b){
alert(this); //默认this是window
}
function sub(a,b){
}
add(3,1); // 弹出[object window]
add.call(sub,3,1); //弹出 function sub(a,b){}; 使用call可以修改扩展函数赖以运行的作用域
2、列子(该列子是google来的,觉得不错)
function Animal(){
this.name = 'Animal';
this.showName = function(){
alert(this.name);
}
}
function Cat(){
this.name = 'Cat';
}
var animal = new Animal();
var cat = new Cat();
animal.showName.call(cat); //传递的this为cat,所以调用返回的是cat对应的'Cat'
3、apply和call功能是一样的,就在传递参数有所区别
function add1(a,b){
alert(this);
}
function add2(a,b){
add1.apply(this,[a,b]);
//add1.apply(this,arguments);
}
function sub(a,b){
}
add1(1,2);
add1.apply(sub,[1,2]);