簡體   English   中英

為什么setTimeout無法識別函數名稱?

[英]Why doesn't setTimeout recognize function name?

(function( $ ){

   $.fn.hash = function(){

   function activate()
   {
      setTimeout('checkHash()', 100);
   }

   activate();

   var previousHashTag = location.hash;

   var previousHashProperty = '';

   function checkHash()
   {
     if( previousHashTag !== location.hash )
     {
        $('body').trigger("hashchange", [ getHashObj() ]);
        previousHashTag = location.hash;
        setTimeout( "checkHash()", 200);
     }
     setTimeout( "checkHash()", 100);
   }

這是我要制作的哈希插件。 當用戶加載插件時,我想調用activate()函數。 activate函數將設置一個超時,以每100毫秒檢查一次哈希。 由於checkHash在此對象的函數之外,我該如何實現?

您正在將字符串傳遞給setTimeout並對其進行評估。 這打破了正常范圍。 不要這樣做,而是傳遞函數。

setTimeout(checkHash, 100);

現在將保留作用域,並且您可以從checkHash訪問activate ,反之亦然,因為它們在同一作用域中聲明。

您在setTimeout中使用字符串參數,這意味着代碼將在全局對象中運行。 由於您的調用函數是在另一個函數的閉包中定義的,因此您必須傳遞一個引用

setTimeout(checkHash, 100);

或使用匿名功能

setTimeout(function(){
  checkHash();
});

要將任何參數傳遞給從setTimeout調用的函數時,必須使用第二種方法。

setTimeout(function(){
  checkHash(arg);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM