for 循环中的 JavaScript setTimeout 用于性能测试

标签 javascript for-loop settimeout

我正在尝试使用 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/

相关文章:

Javascript,在不知道我处于什么页面级别的情况下转到url

javascript - 使用 Controller 作为语法的多个 angularjs 指令实例

python - 在遍历字典的同时修改字典。 Python 字典中的错误?

c# - for 循环生成的工作线程列表超出了 for 循环迭代次数

javascript - 如何使用 setTimeout() 调用 jQuery(document).ready 之外的函数?

javascript - Instagram 图片到您周围 1 公里半径内的 Google map

c - 打印语句不断打印多次而不是一次?

javascript - 计时器如何在 Javascript 中工作?

Javascript - setTimeout 未定义?

javascript - 我如何使用 jQuery 来点击和选择并让它填充一个字段