有没有类似于jQuery的JavaScript方法delay()
或wait()
(在特定时间内延迟执行脚本)?
只是为了添加其他人所说的内容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".
有以下内容:
setTimeout(function, milliseconds);
可以在执行函数之后传递的函数.
请参阅:窗口setTimeout()
方法.
只是扩展一点...你可以直接在setTimeout
调用中执行代码,但正如@patrick所说,你通常会分配一个回调函数,就像这样.时间是毫秒
setTimeout(func, 4000); function func() { alert('Do stuff here'); }
如果你真的想要一个阻塞(同步)delay
功能(无论如何),为什么不做这样的事情:
您需要使用setTimeout并将其传递给回调函数.您无法在javascript中使用sleep的原因是因为您在此期间阻止整个页面执行任何操作.不是一个好的计划.使用Javascript的事件模型并保持愉快.不要打它!
您还可以使用window.setInterval()以固定间隔重复运行某些代码.
要添加之前的评论,我想说以下内容:
setTimeout()
JavaScript中的函数本身不会暂停脚本的执行,而只是告诉编译器在将来的某个时间执行代码.
没有一个函数可以实际暂停JavaScript内置的执行.但是,您可以编写自己的函数来执行类似无条件循环的操作,直到达到时间为止,然后使用该Date()
函数并添加所需的时间间隔.
如果您只需要测试延迟,可以使用:
function delay(ms) { ms += new Date().getTime(); while (new Date() < ms){} }
然后,如果你想延迟2秒,你会:
delay(2000);
可能不是最适合制作的.更多关于评论的内容
您为什么不能将代码放在承诺的后面?(从我的头顶输入)
new Promise(function(resolve, reject) {
setTimeout(resolve, 2000);
}).then(function() {
console.log('do whatever you wanted to hold off on');
});
简单的答复是:
setTimeout( function () { x = 1; }, 1000);
上面的函数等待1秒钟(1000毫秒),然后将x设置为1。您可以在匿名函数内做任何您想做的事情。