我正在尝试使用 setTimeout 使用 console.time() 和 console.timeEnd() 进行性能测试。但是,setTimeout() 不会延迟 for() 循环。
这是 JS fiddle :
// Start the timer.
console.time('testFor');
for ( i = 0; i < 5; i++ ) {
setTimeout( console.log('The number is ' + i), 2000 );
}
// End the timer, get the elapsed time.
console.timeEnd('testFor');
如何使 setTimeout() 在我的脚本中工作以及为什么它对我不起作用?
最佳答案
其他人已经针对您的问题提出了出色的解决方案 - 我想更仔细地检查您的代码中发生的情况。
setTimeout
不会延迟代码的执行(就像其他语言中的 sleep
一样),而是推迟运行另一个代码块。这是一个奇怪的概念,很难理解;考虑以下示例:
console.time("Main Program");
console.time("Defered Code");
setTimeout(deferedCode, 1000);
console.timeEnd("Main Program");
function deferedCode() {
console.timeEnd("Defered Code");
}
如果我们在运行此代码后查看控制台,我们将看到“主程序”几乎立即打印出来,大约一秒钟后打印出“延迟代码”。
我们要求 setTimeout
在未来 1000 毫秒的时间运行函数 deferedCode
,然后让其余代码运行。
还请注意,deferedCode
被传递到 setTimeout
,而没有 ()
。我们将函数本身而不是 deferedCode
的结果传递给 setTimeout
,以便 setTimeout
可以选择何时运行它。
关于for 循环中的 JavaScript setTimeout 用于性能测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40312593/