2012-06-10 37 views
0

我是Javascript新手,我正在分析下面的代碼。我的問題是:對於setTimeout()函數,它是如何被調用的?它看起來像它只是被分配給變量this.timer,而且它還沒有被調用。但是該功能仍然執行。我在想什麼/不理解?非常感謝你的幫助!Javascript的執行要求

$(document).ready(function() { 
var validateUsername = $('#validateUsername'); 
$('#username').keyup(function() { 
var t = this; 
if (this.value != this.lastValue) { 
    if (this.timer) clearTimeout(this.timer); 
    validateUsername.removeClass('error').html('<img src="images/ajax-loader.gif"  height="16" width="16" /> checking availability...'); 

    this.timer = setTimeout(function() { 
    $.ajax({ 
     url: 'ajax-validation.php', 
     data: 'action=check_username&username=' + t.value, 
     dataType: 'json', 
     type: 'post', 
     success: function (j) { 
     validateUsername.html(j.msg); 
     } 
    }); 
    }, 200); 

    this.lastValue = this.value; 
} 
}); 
}); 

回答

1

它是如何被調用?

函數名稱(setTimeout)後跟一個(字符,則一些參數,然後一個字符)

這些參數中的第一個是一個函數表達式,它跨多行分割。

它看起來對我來說,它只是被賦予變量this.timer

它的返回值(可以與clearTimeout使用的標識符)被賦值,而不是setTimeout功能本身。

+0

噢好的。因此,爲了跟上這一點,如果我要寫一行代碼,例如:var a = function(){},a()會執行還是僅僅定義它?非常感謝你的幫助! – voltair

+0

如果您只是將一個函數表達式分配給一個變量,而不做其他任何操作,那麼它將不會執行。 – Quentin

1

在指定的延遲後執行代碼片段或函數。

setTimeout在毫秒量的參數(第二參數)後觸發給定的函數參數(第一個參數)。

返回值是:

timeoutID是超時,其可以稍後window.clearTimeout使用的數字ID。

Make sure to real all the MDN page

1

的功能在這裏稱爲:

this.timer = setTimeout(function() {...}); 

setTimout()執行的延遲之後匿名函數,同時返回它的數字ID。然後this.timer存儲該ID,稍後可以使用clearTimeout