任何语言中,函数都是占据大半*,学好函数是基本。今日主题,回调函数。
我们先来写两个函数:
1.将函数中的参数,每个都*2,然后push进数组,返回数组
2.将函数中的参数,加1
1 代码很简单,如下:
function multiplyBytwo (a,b,c) { var i,arr = []; for( i= 0;i<arguments.length;i++) { arr[i] = arguments[i]*2 } //console.log(arr); return arr; }
调用: multiplyBytwo(1,2,3);//[2,4,6]
2的代码更简单,如下:
function addOne (a) { //console.log(a+1); return a+1; }
调用:addOne(2);//3
两个简单的函数和函数调用写好了,但是怎样将这两个函数合在一块呢?能不能以回调函数的形式的传参数呢?
我们都知道,函数的参数可以是变量之类的,也可以是函数之类的,那么我们尝试一下将函数作为参数传进函数,上代码:
function multiplyBytwo_callback(a,b,c,callback) { var i=0,arr = []; for( i= 0;i<arguments.length;i++) { arr[i] = callback(arguments[i]*2) } console.log(arr); return arr; }
function addOne (a) { return a+1; }
上面的一个函数,传入四个参数,我们看第四个参数,在函数体执行的时候,看见它这样写的,callback(***),嗯,就是这样的,它是一个函数,加括号调用了。如果在for循环中
arr[i] = arguments[i]*2 这样写,就跟刚开始讲的一样,就是将参数*2,但是这样写,
arr[i] = callback(arguments[i]*2),就是将参数*2后再传入callback中,然后在将它赋值给arr[i];
这样就很灵活了,我们想要什么样效果都可以来定义这个callback函数,现在我们定义这样一个函数
function addOne (a) { return a+1; }
然后,调用multiplyBytwo_callback 函数
multiplyBytwo_callback(2,4,8,addOne);
或者:
multiplyBytwo_callback(2,4,8,function addOne (a) {
//console.log(a+1);
return a+1;
});//[ 5, 9, 17, NaN ]
如果想获得前三个元素在调用一些数组的slice方法,
function addOne (a) { //console.log(a+1); return a+1; } function multiplyBytwo_callback(a,b,c,callback) { var i=0,arr = []; for( i= 0;i<arguments.length;i++) { arr[i] = callback(arguments[i]*2) } var a = arr.slice(0,-1); console.log(a); return a; } multiplyBytwo_callback(1,2,3,addOne);//[ 3, 5, 7 ]
如有错误,敬请批评。
每日一句:It doesn't matter to be a mass of bruises, and this time I care nothing about。。。
翻译:这一次,遍体鳞伤也没关系;这一次,可以什么都不在乎