回调函数,setTimeout,Promise

回调函数

在函数里调用传进来的函数(参数),该函数叫回调函数。

好处

  • 让封装的函数更灵活
  • 异步

forEach使用的回调函数

let ary = [];
ary.forEach(function(){

});



let ary=[2,3,4,5,6,7,8]
let sort=function(ary,func){
    for(let i=0;i<ary.length;i++){
        for(let j=0;j<ary.length-i-1;j++){
            if(func(ary[j],ary[j+1])>0){
                let temp=ary[j];
                ary[j]=ary[j+1];
                ary[j+1]=temp;
            }
        }
    }
}
sort(ary,function(a,b)){
    return b-a;
})
console.log(ary);

扩展

异步

同步:一个做完另一个才能做

异步:同时做(如:用户同时访问一个页面),对性能要求高

异步方法:

setTimeout(回调,时间)

括号内时间:参数,以毫秒 ms 为单位;指定的时间后,回调

let  cook = function(){
    console.log('开始做饭');
    setTimeout(function){
        console.log('饭已经做好');

    },3000);      
}             // 开始做饭 (3s后输出)  饭已经做好
let  cook = function(){
    console.log('开始做饭');
    setTimeout(function){
        console.log('饭已经做好');
        wash();
    },3000);      
}            
let  cook = function(){
    console.log('开始洗衣服');
    setTimeout(function){
        console.log('衣服已经洗好');
        clean();
    },3000);      
}             // 饭已经做好 (3s后输出)  开始洗衣服

Promise

跟回调一起用      es6

开始: * 成功(resole)-状态, 不会改变 * 失败(reject)

状态的改变通过then 想要在哪儿调用什么就在哪儿调用 then

let promise = new Promise(function(resolve,reject)){
    setTimeout(function(){
        condole.log('开始');
        resolve();
    },5000)
});       // 5秒后输出开始

Generate

生成器也是函数,可以在执行的中间暂停。

关键字:yield ;

星号 * generate.next

let dowork = function*(){
    yield condole.log('做饭');
    yield condole.log('洗衣服');
    yield condole.log('扫地');
    yield condole.log('玩游戏');
    yield '干完了所有事情';
}
let generate = dowork();
condole.log('go 作业');
generate.next();
condole.log('go 家');
generate.next();
condole.log('go 学习');
condole.log(generate.next());
condole.log('八卦');
generate.next();

let obj=generate.next();
condole.log(obj.value); // {value:'干完了所有事情',done:false} done:没有yield; false:没有结束
condole.log(obj.value); // 干完了所有事情

condole.log(generate.next()); // {value:undefined,done:true}

异步:同时做一些事;效率高,但是对性能要求高。做异步方法:setTimeot;多线程;Promise;Generate.

原文地址:https://www.cnblogs.com/llying/p/7702142.html