|
本帖最后由 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中先通过立即执行函数传入参数,再在匿名函数中调用带参函数和传参。
|
|