请选择 进入手机版 | 继续访问电脑版

UBAINS

 找回密码
 立即注册
搜索
热搜: UBAINS
查看: 338|回复: 0

[学习笔记] 延时函数传参

[复制链接]

7

主题

7

帖子

335

积分

版主

Rank: 7Rank: 7Rank: 7

积分
335
QQ
发表于 2020-10-28 18:31:10 | 显示全部楼层 |阅读模式
本帖最后由 pidtfork 于 2020-10-28 18:32 编辑

延时函数传参



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

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


典型的延时函数使用

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

  4. delay(1,runPrint); //延时1时s执行函数runPrint
  5. delay(1,function(){  //延时1s执行匿名函数
  6.     console.log("ubains");
  7. });
复制代码




延时调用带参函数

  1. function powerOn(chs){
  2.     console.log("power on " +chs);
  3. }
  4. //延时调用一个匿名函数,匿名函数中调用带参函数
  5. delay(1,function(){
  6.     powerOn("all")
  7. })
复制代码



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



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


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

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

  20. //5.利用立即执行函数,可以写成这样
  21. for(vari = 0; i < 8;i++){
  22.     delay(i,(function(chs){
  23.         openChannel(chs);
  24.    })(i))
  25. }
复制代码



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



高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

Archiver|手机版|小黑屋|BBS.UBAINSYUN.COM

GMT+8, 2021-6-20 13:54 , Processed in 0.040292 second(s), 20 queries .

Powered by UBAINS! X3.4

© 2001-2017 UBAINS Inc.

快速回复 返回顶部 返回列表