首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >javascript settimeout cleartimeout例程语法

javascript settimeout cleartimeout例程语法
EN

Stack Overflow用户
提问于 2010-08-09 14:00:13
回答 4查看 2.1K关注 0票数 2

这是来自另一个线程的代码。只有当用户在设定的时间后停止键入时,它才会激活功能。

代码语言:javascript
运行
复制
var keyupTimer;
function keyUpEvent(){
   clearTimeout(keyupTimer);
   keyupTimer = setTimeout(sendInput,1000); // will activate when the user has stopped typing for 1 second
} 

function sendInput(){
    alert("Do AJAX request");
}

它是按原样工作的。但是,如果我在这行中放入括号来尝试传递变量,它为什么会停止工作:

代码语言:javascript
运行
复制
keyupTimer = setTimeout(sendInput,1000); //original code

代码语言:javascript
运行
复制
keyupTimer = setTimeout(sendInput(),1000); //with just empty ()

代码语言:javascript
运行
复制
keyupTimer = setTimeout(sendInput(var),1000);//or with ('test') or with (var)

使用括号时,不会出现延迟,并且会立即调用sendInput函数。这是这个特定例程的唯一格式吗?

提亚

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-09 14:07:03

你可以试试

代码语言:javascript
运行
复制
keyupTimer = setTimeout(function()
{
     sendInput('test');
},1000);

所以有一个匿名函数作为'setTimeout‘的参数

票数 1
EN

Stack Overflow用户

发布于 2010-08-09 14:02:09

keyupTimer = setTimeout(sendInput,1000);//原码

上面写着“1000ms后运行sendInput”;

keyupTimer = setTimeout(sendInput () ,1000);//只带空()

这就是“运行sendInput,捕获返回值(应该是一个函数),并在1000ms之后运行它”。

sendInput是一个函数,sendInput()是一个调用的函数。

票数 3
EN

Stack Overflow用户

发布于 2010-08-09 14:05:53

setTimeout的第一个参数是函数引用(即指向您的函数的变量)。您提供的是一个函数调用。若要传递带参数的函数,请将函数调用包装在匿名函数中。您可以将其作为参数直接传递给setTimeout,因为JavaScript函数是一级对象。

代码语言:javascript
运行
复制
keyupTimer = setTimeout(function() {
    sendInput(var);
}, 1000);

更详细地说,这相当于:

代码语言:javascript
运行
复制
var callback = function() {
    sendInput(var);
}
keyupTimer = setTimeout(callback, 1000);

内联模式有其优点,即它可以访问调用setTimeout的作用域。

如果它更适合您,您甚至可以创建一个回调工厂来将函数调用传递给setTimeout,正如@slebetman指出的那样。

代码语言:javascript
运行
复制
function callbackFactory (var) {
    return function() {
        sendInput(var);
    }
};
setTimeout(callbackFactory('some_value'), 1000);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3437649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档