pidtfork 发表于 2020-10-28 18:31:10

延时函数传参

本帖最后由 pidtfork 于 2020-10-28 18:32 编辑

延时函数传参



延时函数回调只能是无参函数,但是某些情况既需要延时也需要传入参数的函数。

延时的时间单位为秒,数值可以是小数


典型的延时函数使用

function runPrint(){
    console.log("ubains");
}

delay(1,runPrint); //延时1时s执行函数runPrint
delay(1,function(){//延时1s执行匿名函数
    console.log("ubains");
});



延时调用带参函数

function powerOn(chs){
    console.log("power on " +chs);
}
//延时调用一个匿名函数,匿名函数中调用带参函数
delay(1,function(){
    powerOn("all")
})


延时调用带参函数且传入不同参数



假如有台时序电源,需要每隔1s顺序打开通道1-8;可以通过下面第一个方法实现,但是对于开通道时还需要有其他关联操作时(改变按钮状态等一起其他事件),如果写在一起就会显得很乱不便于阅读和理解。推荐使用写法5


//1.每隔1秒发送一条对应通道开启的指令
for(vari = 0; i < 8;i++){
    delayCodeString(i,"open code " +i)
}

//2.时序电源通道开
function openChannel(chs){
    console.log("power on " +chs);
    console.log("还有其他功能,开通道时关联其他操作" );
}
//3.这个方法返回一个匿名函数,闭包原理传入的参数能被openChannel获取到
function funPack(chs){
    return function(){
      openChannel(chs);
    }
}
//4.可以写成这样
for(vari = 0; i < 8;i++){
    delay(i,funPack(i))
}

//5.利用立即执行函数,可以写成这样
for(vari = 0; i < 8;i++){
    delay(i,(function(chs){
      openChannel(chs);
   })(i))
}


写法5中先通过立即执行函数传入参数,再在匿名函数中调用带参函数和传参。



页: [1]
查看完整版本: 延时函数传参