Pass parameter to setTimeout callback function
How can I pass a parameter to a setTimeout() callback?
I have some JavaScript code that looks like:
function statechangedPostQuestion()
{
//alert("statechangedPostQuestion");
if (xmlhttp.readyState==4)
{
var topicId = xmlhttp.responseText;
setTimeout("postinsql(topicId)",4000);
}
}
function postinsql(topicId)
{
//alert(topicId);
}
I get an error that topicId
is not defined Everything was working before I used the setTimeout()
function.
I want my postinsql(topicId)
function to be called after some time. What should I do?
回答:
setTimeout(function() {
postinsql(topicId);
}, 4000)
You need to feed an anonymous function as a parameter instead of a string, the latter method shouldn't even work per the ECMAScript specification but browsers are just lenient. This is the proper solution, don't ever rely on passing a string as a 'function' when using setTimeout()
or setInterval()
, it's slower because it has to be evaluated and it just isn't right.
UPDATE:
As Hobblin said in his comments to the question, now you can pass arguments to the function inside setTimeout using Function.prototype.bind()
.
Example:
setTimeout(postinsql.bind(null, topicId), 4000);
下面的代码报错,undefined的错误,并且removeVote里面的index,一直是最后一次的数值
function myLoop() { var upVoteButtons = document.getElementsByClassName("VoteButton--up"); var upVoteButtonsLength = upVoteButtons.length; console.log(`button length is ${upVoteButtonsLength}`); for (var i = 0; i <= upVoteButtonsLength; i++) { timeout = (i + 1) * 1000; //每秒点一次 var currentButton = upVoteButtons[i]; this.currentButton = currentButton; this.index = i; var that = this; setTimeout(function () { removeVote(that.currentButton, that.index); }, timeout) } } function removeVote(myButton, index) { console.log(`index = ${index}, ${myButton}`) myButton.click(); } myLoop();
作者:Chuck Lu GitHub |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2020-01-20 Git rename from index.lock to index failed
2018-01-20 头脑王者 物理化学生物
2018-01-20 头脑王者 艺术,电影,体育,时尚,动漫
2018-01-20 头脑王者 音乐
2018-01-20 头脑王者 地理
2018-01-20 头脑王者 文学
2017-01-20 根据日期计算出周一和周日