当前位置:  开发笔记 > 编程语言 > 正文

使用JavaScript在特定延迟后执行脚本

如何解决《使用JavaScript在特定延迟后执行脚本》经验,为你挑选了10个好方法。

有没有类似于jQuery的JavaScript方法delay()wait()(在特定时间内延迟执行脚本)?



1> Marius..:

只是为了添加其他人所说的内容setTimeout:如果你想在将来调用带参数的函数,你需要设置一些匿名函数调用.

您需要将该函数作为参数传递给它以便稍后调用.实际上,这意味着名称后面没有括号.以下将立即调用警报,它将显示"Hello world":

var a = "world";
setTimeout(alert("Hello " + a), 2000);

要解决此问题,您可以输入函数的名称(如Flubba所做的那样),也可以使用匿名函数.如果需要传递参数,则必须使用匿名函数.

var a = "world";
setTimeout(function(){alert("Hello " + a)}, 2000);
a = "Stack Overflow";

但是如果运行该代码,您会注意到2秒后弹出窗口将显示"Hello Stack Overflow".这是因为变量a的值在这两秒内发生了变化.要在两秒钟后让它说"Hello world",您需要使用以下代码段:

function callback(a){
    return function(){
        alert("Hello " + a);
    }
}
var a = "world";
setTimeout(callback(a), 2000);
a = "Stack Overflow";

它将等待2秒然后弹出"Hello world".



2> Abhinav..:

有以下内容:

setTimeout(function, milliseconds);

可以在执行函数之后传递的函数.

请参阅:窗口setTimeout()方法.


这不是延迟,它是一个分叉.延迟应该在同一个线程中工作.
延迟应该同步工作.这是异步的.
这将立即执行function_reference.要"工作"(异步),它应该表示为:setTimeout(function(){MethodToCall();},1000);
我想指出我们谈论的是JavaScript; 提出"线程"或它应该"同步"工作可能是真的*技术上*和*语义*但是并不真正适合JavaScript的上下文,考虑到实际上没有办法用这两种方法之一实现延迟(你不像在其他语言中那样在JS中创建"线程").此外,除非包含`()`,否则不会立即执行`function_reference`.即`function_reference`就是那个 - 一个参考; 传入`function_reference()`会立即调用该函数.
它不是一个执行它的表达式的函数.@Marius的回答说明了这一点.

3> Polsonby..:

只是扩展一点...你可以直接在setTimeout调用中执行代码,但正如@patrick所说,你通常会分配一个回调函数,就像这样.时间是毫秒

setTimeout(func, 4000);
function func() {
    alert('Do stuff here');
}



4> Mario Werner..:

如果你真的想要一个阻塞(同步)delay功能(无论如何),为什么不做这样的事情:



一个更紧凑的例程:函数延迟(ms){var start_time = Date.now(); while(Date.now() - start_time 该解决方案的难点在于它主动使用处理器,这导致功率使用增加并且可用于其他线程/进程(例如其他选项卡,其他程序)的资源减少.相反,睡眠会暂时中止线程对系统资源的使用.

5> Patrick..:

您需要使用setTimeout并将其传递给回调函数.您无法在javascript中使用sleep的原因是因为您在此期间阻止整个页面执行任何操作.不是一个好的计划.使用Javascript的事件模型并保持愉快.不要打它!


它仍然可用于测试目的.就像延迟表单提交几秒钟来评估页面更改,然后再发出新的HTTP请求.

6> rcoup..:

您还可以使用window.setInterval()以固定间隔重复运行某些代码.


`setTimeout()`执行一次,`setInterval()`重复执行.如果您希望代码每5秒运行一次,则为该作业创建`setInterval()`.
不应该使用setInterval()而应该使用setTimeout

7> 小智..:

要添加之前的评论,我想说以下内容:

setTimeout()JavaScript中的函数本身不会暂停脚本的执行,而只是告诉编译器在将来的某个时间执行代码.

没有一个函数可以实际暂停JavaScript内置的执行.但是,您可以编写自己的函数来执行类似无条件循环的操作,直到达到时间为止,然后使用该Date()函数并添加所需的时间间隔.



8> Christoffer..:

如果您只需要测试延迟,可以使用:

function delay(ms) {
   ms += new Date().getTime();
   while (new Date() < ms){}
}

然后,如果你想延迟2秒,你会:

delay(2000);

可能不是最适合制作的.更多关于评论的内容


在开发中可以很好地运行快速和脏(和临时)解决方案.

9> 小智..:

您为什么不能将代码放在承诺的后面?(从我的头顶输入)

new Promise(function(resolve, reject) {
  setTimeout(resolve, 2000);
}).then(function() {
  console.log('do whatever you wanted to hold off on');
});


10> Luca..:

简单的答复是:

setTimeout(
    function () {
        x = 1;
    }, 1000);

上面的函数等待1秒钟(1000毫秒),然后将x设置为1。您可以在匿名函数内做任何您想做的事情。

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有