0

我是 Javascript 新手,我正在分析以下代码。我的问题是:对于 setTimeout() 函数,它是如何被调用的?在我看来,它只是被分配给变量 this.timer,而且还没有被调用。但是该功能仍然执行。我错过了什么/不理解什么?非常感谢您提前提供的帮助!

$(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;
}
});
});
4

3 回答 3

1

它是怎么称呼的?

函数名 ( setTimeout) 后跟一个(字符,然后是一些参数,然后是一个)字符。

这些参数中的第一个是一个函数表达式,它被分成多行。

在我看来它只是被分配给变量 this.timer

clearTimeout正在分配它的返回值(可以与 一起使用的标识符),而不是setTimeout函数本身。

于 2012-06-10T08:57:16.257 回答
1

在指定延迟后执行代码片段或函数。

setTimeout在毫秒参数(第二个参数)之后触发给定的函数参数(第一个参数)。

返回值为:

timeoutID是超时的数字ID,后面可以和window.clearTimeout一起使用。

确保真实的所有 MDN 页面

于 2012-06-10T08:57:58.097 回答
1

该函数在这里调用:

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

setTimout()延迟后执行匿名函数,同时返回其数字 ID。this.timer然后存储该 ID,稍后可以使用clearTimeout.

于 2012-06-10T09:00:09.300 回答