回调函数的学习

  任何语言中,函数都是占据大半*,学好函数是基本。今日主题,回调函数。

  我们先来写两个函数:

    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。。。

翻译:这一次,遍体鳞伤也没关系;这一次,可以什么都不在乎

 

上一篇:JavaScript 执行线程图解


下一篇:常考面试题之两个字符串相加(长整数相加)