JAVA & XML & JAVASCRIPT & AJAX & CSS

          Web 2.0 技術儲備............

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            77 隨筆 :: 17 文章 :: 116 評論 :: 0 Trackbacks

          轉自:恒星設計? URL = http://www.bjcan.com/hengxing/more.asp?lb=94

          在使用JScript的時候,我們有時需要間隔的執行一個方法,比如用來產生網頁UI動畫特效啥的。這是我們常常會使用方法setInterval或setTimeout,但是由于這兩個方法是由腳本宿主模擬出來的Timer線程,在通過其調用我們的方法是不能為其傳遞參數。

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

          window.setTimeout("delayRun()", n);
          window.setInterval("intervalRun()", n);
          window.setTimeout(delayRun, n);
          window.setInterval(intervalRun, n);
          ??? 顯然強行代參數的調用: window.setTimeout("delayRun(param)", n);
          window.setInterval("intervalRun(param)", n);
          window.setTimeout(delayRun(param), n);
          window.setInterval(intervalRun(param), n);
          ??? 都是錯誤的,因為string literals形式的方法調用,param必須是全局變量(即window對象上的變量)才行;而function pointer形式的調用,完全錯誤了,這是把函數的返回值當成了setTimeout/setInterval函數的參數了,完全不是我們所望的事情。

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

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

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

          評論

          # 我生日 2008-08-12 21:57 龍前
          工會能夠化工   回復  更多評論
            

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

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

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

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

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

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

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

          主站蜘蛛池模板: 南阳市| 习水县| 容城县| 东乡族自治县| 白银市| 通化市| 淮安市| 衡东县| 博罗县| 安庆市| 阿荣旗| 平罗县| 岳阳市| 西贡区| 弥渡县| 灯塔市| 呈贡县| 锡林浩特市| 佳木斯市| 南溪县| 乌拉特中旗| 白朗县| 二连浩特市| 宜州市| 忻州市| 玉环县| 格尔木市| 霍邱县| 依兰县| 嘉善县| 平湖市| 百色市| 博爱县| 西藏| 昌吉市| 崇信县| 威信县| 临潭县| 舞钢市| 灯塔市| 紫阳县|