JAVA & XML & JAVASCRIPT & AJAX & CSS

          Web 2.0 技術(shù)儲(chǔ)備............

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            77 隨筆 :: 17 文章 :: 116 評(píng)論 :: 0 Trackbacks
          <2006年4月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          常用鏈接

          留言簿(6)

          我參與的團(tuán)隊(duì)

          隨筆分類(84)

          隨筆檔案(77)

          文章分類(2)

          文章檔案(17)

          Javascript

          最新隨筆

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          轉(zhuǎn)自:恒星設(shè)計(jì)? URL = http://www.bjcan.com/hengxing/more.asp?lb=94

          在使用JScript的時(shí)候,我們有時(shí)需要間隔的執(zhí)行一個(gè)方法,比如用來產(chǎn)生網(wǎng)頁UI動(dòng)畫特效啥的。這是我們常常會(huì)使用方法setInterval或setTimeout,但是由于這兩個(gè)方法是由腳本宿主模擬出來的Timer線程,在通過其調(diào)用我們的方法是不能為其傳遞參數(shù)。

          ??? 我們常用的使用場景是:

          window.setTimeout("delayRun()", n);
          window.setInterval("intervalRun()", n);
          window.setTimeout(delayRun, n);
          window.setInterval(intervalRun, n);
          ??? 顯然強(qiáng)行代參數(shù)的調(diào)用: window.setTimeout("delayRun(param)", n);
          window.setInterval("intervalRun(param)", n);
          window.setTimeout(delayRun(param), n);
          window.setInterval(intervalRun(param), n);
          ??? 都是錯(cuò)誤的,因?yàn)閟tring literals形式的方法調(diào)用,param必須是全局變量(即window對(duì)象上的變量)才行;而function pointer形式的調(diào)用,完全錯(cuò)誤了,這是把函數(shù)的返回值當(dāng)成了setTimeout/setInterval函數(shù)的參數(shù)了,完全不是我們所望的事情。

          ??? 解決這個(gè)問題的辦法可以使用匿名函數(shù)包裝的方式,在以下scenario中我們這么做:
          function foo()
          {
          ??? var param = 100;
          ??? window.setInterval(function()
          ??? {
          ??????? intervalRun(param);
          ??? }, 888);
          }

          function interalRun(times)
          {
          ??? // todo: depend on times parameter
          }
          ??? 這樣一來,就可以不再依賴于全局變量向delayRun/intervalRun函數(shù)中傳遞參數(shù),畢竟當(dāng)頁面中的全局變量多了以后,會(huì)給腳本的開發(fā)、調(diào)試和管理等帶來極大的puzzle。

          posted on 2006-04-27 10:39 Web 2.0 技術(shù)資源 閱讀(11616) 評(píng)論(8)  編輯  收藏 所屬分類: Javascript

          評(píng)論

          # 我生日 2008-08-12 21:57 龍前
          工會(huì)能夠化工   回復(fù)  更多評(píng)論
            

          # re: window.setTimeout() & window.setInterval() 使用方式與參數(shù)傳遞問題! 2009-02-09 12:54 zean
          天才~  回復(fù)  更多評(píng)論
            

          # re: window.setTimeout() & window.setInterval() 使用方式與參數(shù)傳遞問題![未登錄] 2009-06-22 13:37 java fan
          學(xué)習(xí)了  回復(fù)  更多評(píng)論
            

          # re: window.setTimeout() & window.setInterval() 使用方式與參數(shù)傳遞問題! 2009-09-16 17:28 someone
          window.setInterval("intervalRun('param')", n);
          這樣就行了  回復(fù)  更多評(píng)論
            

          # re: window.setTimeout() & window.setInterval() 使用方式與參數(shù)傳遞問題! 2010-07-21 09:57 simpleCode
          thanks a lot  回復(fù)  更多評(píng)論
            

          # re: window.setTimeout() & window.setInterval() 使用方式與參數(shù)傳遞問題![未登錄] 2011-04-17 10:36 ice
          用到了 非常感謝 但是不太明白原理 可以解釋一下嗎  回復(fù)  更多評(píng)論
            

          # re: window.setTimeout() & window.setInterval() 使用方式與參數(shù)傳遞問題! 2011-04-17 18:07 Web 2.0 技術(shù)資源
          q@ice
          請(qǐng)學(xué)習(xí)下Javascript的閉包特性,你就明白啦!  回復(fù)  更多評(píng)論
            

          # re: window.setTimeout() & window.setInterval() 使用方式與參數(shù)傳遞問題! 2011-12-19 11:03 阿斯大法
          不太懂……  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 神池县| 泰顺县| 德清县| 普格县| 商城县| 云林县| 宜春市| 定日县| 孙吴县| 铜陵市| 马公市| 城步| 沁源县| 高阳县| 黄浦区| 钟祥市| 石台县| 龙胜| 荔浦县| 肇源县| 寿阳县| 乃东县| 芜湖市| 峨山| 南召县| 太仓市| 三台县| 家居| 济宁市| 临城县| 汝南县| 德阳市| 吐鲁番市| 柳河县| 从江县| 余庆县| 秦安县| 彝良县| 贵州省| 雅江县| 弋阳县|