js回调函数

1、当一个函数的形参需要接收另一个函数数据时,那该形参中的函数称为回调函数。

argu为形参变量用来接收数据
数据类型:number、string、null、undefinned、object
fn(123);
fn("123456");
fn(document.getElementById('box1'));
//函数匿名传递给形参
fn(function (){} )    //argu = function(){}
//命名函数,将函数名传递给形参
function fn1(){}   //var fn1 = function(){}
fn(fn1);   //argu = fn1 = function(){0}

2、函数形参的命名规范 : callback

function fnn(callback){
    callback();     //运行传入的回调函数
}

3、回调函数的应用实例

定义一个函数返回两个数的和
function sum(a,b){
    return a + b;
}

//两个数的差    return  a - b
定义运算函数 (分离:不变 变得部分分离)
function operate(a,b,callback){
    if(isNaN(a + b)){
        alert("请输入正确的格式");
        return 0;
    }
    return callback(a,b)    //a1 = a; b1 = b
}
//加法
var res = operate(2,3,function(a1,b1){
    return a1 + b1
})
console.log(res)

//减法    return a1 - b1

4、回调函数具备的特征

   4-1  内部有大片公共流程执行要求

   4-2   动态切换  调用
应用展示
  utils.js
function operate(a,b,callback){
    if(isNaN(a + b)){
        alert("请输入数字");
        return 0
    }
    return callback(+a , +b)
}
<input type="text" placeholder="第一个数" id="in1">
<input type="text" placeholder="第二个数" id="in2">

<button id="btn1">加法</button>
<button id="btn2">减法</button>

<script src="utils.js"></script>

<script>
     //加法的运算过程
    document.getElementById('btn1').onclick = function(){
        var in1 = document.getElementById('in1').value;
        var in2 = document.getElementById('in2').value;
        var res = operate(in1,in2,function(a,b){
            return a + b;
        })

        alert(res);
    }
    
    //减法运算    return a - b
</script>    

5、常见系统提供的回调方法

5-1 arr.map 生成新的数组,这里必须要有return
var arr = [1,3,5,7,9]
var newArr = arr.map(function(item,index){
    return item * 2
})
5-2 arr.forEach 单纯的遍历数组方法 , 不要用return,否则语句无效返回
var newArr = arr.forEach(function(item,index){
    //如果用return
    return item * 2
})
console.log(newArr);    //return语句无效 返回undefined
5-3 arr.filter 数组过滤器,按照条件返回新数组
var arr = [1,2,4,6,7,9,68]
var newArr = arr.filter(function(item,index){
    return item > 2;    //返回大于2的值
    return item % 2 == 0;  //返回所有的偶数
})
console.log(arr,newArr)

6、字符串中带有的回调方法 replace

function myReplzce(str,target,callback){
    //target 在str中的下标位置
    var index = str.indexOf(target);
    //替换结果 ”“
    var res = "";
    if(index != -1){
        //目标存在
        var res = callback()
    }
    //返回替换的结果
    var newArr = "";
    var perStr = str.sunstring(0,index);
var nexStr = str.substring(index + target.length,str.length)
	newStr = perStr + res + nexStr;
    return newStr;
}

7、定义一个可以扩展的冒泡排序函数,实现自动控制升序、降序

function bubbleSort(arr,callback){
    for(var i = 0; i < arr.length - 1; i++){
        for(var j = 0; j < arr.length - i - 1; j++){
            if(callback(arr[j],arr[j+1]) > 0){
                var temp = arr[j + 1];
                arr[j + 1] = arr[j];
                arr[j]  =  temp;
            }
        }
    }
}
var arr = [1,6,2,8,3,45,4,67,7]
bubbleSort(arr,function(a,b){   // a = arr[j]  b = arr[j +1]
    return a - b
})
console.log(arr);
bubbleSort(arr,function(a1,b1){ //a1 = arr[j] b1 = arr[j +1]
    return b1 - a1
})
console.log(arr);


arr[j] - arr[j + 1]   //升序
arr[j + 1] - arr[j]   //降序

8、延迟器:setTimeout(callback,time),会在time时间后,调用

 setTimeout(function(){
        alert("就啊哈哈哈")
    }, 1000);   //一秒后调用

 //先打印 1、3,然后在打印 2
    console.log("1")
    setTimeout(function(){
        console.log("2")
    }, 0);
    console.log("3")

9、setInterval(callback,time)

9-1 按照time的时间间隔,重复调用callback 中的代码
9-2 也是等其他流程走完,才开始执行
9-3 利用该返回值,可以停止定时器
var count = 0;
    console.log("定时器之前");
    var res = setInterval(function () {  //2
        count++;
        console.log(count)
        if(count >= 5){
            clearInterval(res)   //停止计时器
        }
    }, 1000)
    console.log("定时器之后");

//  定时器之前   定时器之后  (先执行)
//   在开始计数
posted @ 2022-06-13 19:39  熊二Ei  阅读(2404)  评论(0)    收藏  举报