2012-06-10 36 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