当前位置: 首页 > 面试题库 >

如何将参数传递给setTimeout()回调?

司寇高洁
2023-03-14
问题内容

我有一些如下的JavaScript代码:

function statechangedPostQuestion()
{
  //alert("statechangedPostQuestion");
  if (xmlhttp.readyState==4)
  {
    var topicId = xmlhttp.responseText;
    setTimeout("postinsql(topicId)",4000);
  }
}

function postinsql(topicId)
{
  //alert(topicId);
}

我收到topicId未定义的错误,在使用该setTimeout()功能之前,一切都在工作。

我希望postinsql(topicId)一段时间后调用我的html" target="_blank">函数。我该怎么办?


问题答案:

setTimeout(function() {
postinsql(topicId);
}, 4000)

您需要将匿名函数作为参数而不是字符串作为参数,后一种方法甚至不符合ECMAScript规范,但浏览器比较宽松。这是正确的解决方案,在使用setTimeout()或时setInterval(),永远不要依赖于将字符串作为“函数”进行传递,因为它必须进行求值并且不正确,所以速度较慢。

更新:

正如Hobblin在对问题所说的那样,现在您可以使用将参数传递给setTimeout内部的函数Function.prototype.bind()

例:

setTimeout(postinsql.bind(null, topicId), 4000);


 类似资料:
  • 问题内容: 我正在A中使用RUN指令安装rpm 但是,我想将值“ 2.3”作为参数传递。我的RUN指令应类似于: 哪里 问题答案: 您正在寻找和指导。这些是Docker 1.9中的新功能。查看https://docs.docker.com/engine/reference/builder/#arg。这将允许您添加到,然后使用构建。

  • 问题内容: 我正在尝试将一些参数传递给用作回调的函数,该怎么做? 问题答案: 如果您想要更一般的东西,可以使用arguments变量,如下所示: 但是否则,您的示例可以正常工作(可以在测试器中使用arguments [0]代替回调)

  • 问题内容: 我在工具栏中有大约10个QAction(此数字在运行时会有所不同),它们都会做相同的事情,但是使用不同的参数。我正在考虑将参数作为属性添加到QAction对象,然后,QAction的触发信号还将对象本身发送给回调函数,以便我可以获取该函数所需的参数。我实际上对此有2个问题: 能做到吗 有更好的方法吗? 问题答案: 您可以使用信号映射器发送动作对象本身。但是,最好仅发送一个标识符并在信号

  • 问题内容: 我想将登录用户单击的sa 列表中的传递给twitter bootstrap 。我正在与 angularjs* 一起使用 grails ,其中数据是通过 angularjs 呈现的。 *** 组态 我的grails视图页面是 我的是 所以,我怎么能传递到? 问题答案: 我尝试如下。 我在 鼓励 按钮上打电话给angularjs控制器, 我设置的从angularjs控制器。 我提供了一个p

  • 问题内容: 这似乎是一个愚蠢的问题,但是我是这个话题的新手。我正在致力于关于节点js的承诺。我想将参数传递给Promise函数。但是我不知道。 而功能类似于 问题答案: 将Promise包裹在一个函数中,否则它将立即开始工作。另外,您可以将参数传递给函数: 然后,使用它: ES6: 用:

  • 问题内容: 有没有办法将更多数据传递到jQuery中的回调函数中? 我有两个函数,例如,我希望回调到,以传递AJAX调用的结果数据以及一些自定义参数 我希望能够将自己的参数以及AJAX调用返回的结果传递给回调。 问题答案: 解决方案是通过闭包绑定变量。 作为一个更基本的示例,下面是一个示例函数,该函数接收并调用一个回调函数,以及一个示例回调函数: 这将调用回调并提供一个参数。现在,您想提供一个附加