• 精解window.setTimeout()使用方式与参数传递问题

    普通类
    • 支持
    • 批判
    • 提问
    • 解释
    • 补充
    • 删除
    • 内容

    精解window.setTimeout()使用方式与参数传递问题!(转)

    [setTimeout] 
    setTimeout(
    表达式,延时时间

    PS:延时时间的最大值是15分钟

    在执行时,是在载入后延迟指定时间后,去执行一次表达式,记住,次数是一次 

    setTimeout实现的自动变化显示随机数的效果
     

    Html代码  

    1. <html>  

    2. <head>  

    3. <script>  

    4. window.onload=sett;  

    5. function sett()  

    6. {  

    7. document.body.innerHTML=Math.random();  

    8. setTimeout("sett()",500);  

    9. }  

    10. </script>  

    11. </head>  

    12. <body>  

    13. </body>  

    14. </html>  




    [setInterval] 
    setInterval(
    表达式,交互时间
    则不一样,它从载入后,每隔指定的时间就执行一次表达式 

    setInterval实现的自动变化显示随机数的效果
     

    Html代码  

    1. <html>  

    2. <head>  

    3. <script>  

    4. function sett()  

    5. {  

    6. document.body.innerHTML=Math.random();  

    7. }  

    8. setInterval("sett();", 500);  

    9. </script>  

    10. </script>  

    11. </head>  

    12. <body>  

    13. </body>  

    14. </html>  



    在使用JScript的时候,我们有时需要间隔的执行一个方法,比如用来产生网页UI动画特效啥的。这是我们常常会使用方法setIntervalsetTimeout,但是由于这两个方法是由脚本宿主模拟出来的Timer线程,在通过其调用我们的方法是不能为其传递参数。 
       
    我们常用的使用场景是: 

    Javascript代码  

    1. window.setTimeout("delayRun()", n);   

    2. window.setInterval("intervalRun()", n);   

    3. window.setTimeout(delayRun, n);   

    4. window.setInterval(intervalRun, n);   



       显然强行代参数的调用:window.setTimeout("delayRun(param)",n); 
     

    Javascript代码  

    1. window.setInterval("intervalRun(param)", n);   

    2. window.setTimeout(delayRun(param), n);   

    3. window.setInterval(intervalRun(param), n);   



        都是错误的,因为stringliterals形式的方法调用,param必须是全局变量(window对象上的变量)才行;而functionpointer形式的调用,完全错误了,这是把函数的返回值当成了setTimeout/setInterval函数的参数了,完全不是我们所望的事情。 
       
    解决这个问题的办法可以使用匿名函数包装的方式,在以下scenario中我们这么做: 
     

    Javascript代码  

    1. function foo()   

    2. {   

    3.     var param = 100;   

    4.     window.setInterval(function()   

    5.     {   

    6.         intervalRun(param);   

    7.     }, 888);   

    8. }   

    9. function interalRun(times)   

    10. {   

    11.     // todo: depend on times parameter   

    12. }   


       这样一来,就可以不再依赖于全局变量向delayRun/intervalRun函数中传递参数,毕竟当页面中的全局变量多了以后,会给脚本的开发、调试和管理等带来极大的puzzle

    • 在新页面中查看内容
    • 下载源文件
    • 标签:
    • 方法
    • 时间
    • 代码
    • param
    • intervalrun
    • 函数
    • settimeout
    • window.setinterval
    • delayrun
    • setinterval
  • 加入的知识群:
    学习元评论 (0条)

    评论为空
    聪明如你,不妨在这 发表你的看法与心得 ~



    登录之后可以发表学习元评论
      
暂无内容~~
顶部