循环回调函数的基本用法 非常重要

296 阅读1分钟

一、回调函数

1.回调函数(callback): 如果把函数当成实参传入到另一个函数里执行,那么这个函数就被称为回调函数。

function fn(cb){
                cb(1,2,[1,2,3]); //在fn调用的时候,也可以执行cb回调函数
            }
fn(function(item,key,arr){
                console.log("新函数","传入的实参是",item,key,arr);
}); //新函数 传入的实参是 1 2 (2) [1, 2]   
//这里的调用 ,把函数当成实参传入到上面的fn函数里

二、实现一个myForEach方法达到内置forEach效果

 var arr = ["张三","李四","王五"];
 function  myforEach(arr,fn) {
            // arr 是数组  
            // fn是 传入的函数 function (item,key,arr) {}
            // 循环数组
            for(var i=0;i<arr.length;i++){
                fn(arr[i],i,arr);  //会被调用三次 ,回调函数调用传入的实参 
            }
        }

// 自己的forEach
myforEach(arr,function (item,key,arr) {  //形参 
                console.log("传入的函数执行",item,key,arr);
        })

三、 怎么循环筛选对象数组?

 var arr=[
                {name:"张一",score:80},
                {name:"张二",score:60},
                {name:"张三",score:67},
                {name:"张四",score:56},
                {name:"张五",score:67},
                {name:"张六",score:43},
            ]
            // 怎么筛选所有及格学员
var newarr = arr.filter(function(item){
                 console.log(item);  //是每一个对象
                 return item.score>=60;// 获取每一个对象里的分数大于等于60分;

})
 console.log(newarr);//筛选出所有及格的学员对象

四、实现一个myEvery方法达到内置every效果

1.every 的最终结果是和 回调函数 的返还值有关系 ,函数的返还值 就是函数的执行结果。 返还结果不能有false,如果有一个false,那么最终的结果就是false ,其实就是所有结果的 &&(且)关系。

//1. 是一个 && 关系
var arr = [3, 4,5];
var res = true;
        for(var i=0;i<arr.length;i++){
            res = res && arr[i];  // arr[0] && arr[1] && arr[2]
        }
        console.log(res);  // 就是所有的值为true的时候才是true ,如果有任意一个false 那么结果就是false
            var res=ture;
            for(var i=0;i<arr.length;i++){
                res=res&arr[i]
            }
            console.log(res);
// 2. 要拿到 回调函数的执行结果
        var arr = [2,4,5];
        function  myEvery(arr,fn) {
            var result = true;
            for(var i=0;i<arr.length;i++){
                // key 就是 i ; item就是arr[i];
                // console.log(i,arr[i])
                 var res =  fn(arr[i],i,arr);  // 这个就是回调函数的执行结果 也就是传入回调的返还值
            //    console.log("结果",res);
                 result = res && result;
            }
            return result;
        }

       var res =  myEvery(arr,function (item,key,arr) {
            console.log("执行了",item,key,arr);
            return item>1;//返还结果跟这个返还值有关 决定作用在这儿 都大于1就是true,有一个是flase,那么结果就是flase。
        });
        console.log(res);//执行了 2 0 (3) [2, 4, 5]
                         //执行了 4 1 (3) [2, 4, 5]
                        //执行了 5 2 (3) [2, 4, 5]
                        //true