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

JavaScript,Node.js:Array.forEach是否异步?

司浩壤
2023-03-14
问题内容

Array.forEach对JavaScript 的本机实现有疑问:它是否异步运行?例如,如果我打电话:

[many many elements].forEach(function () {lots of work to do})

这将是非阻塞的吗?


问题答案:

不,它正在阻止。看一下算法的规格。但是,在MDN上给出了一个可能更容易理解的实现:

if (!Array.prototype.forEach)
{
  Array.prototype.forEach = function(fun /*, thisp */)
  {
    "use strict";

    if (this === void 0 || this === null)
      throw new TypeError();

    var t = Object(this);
    var len = t.length >>> 0;
    if (typeof fun !== "function")
      throw new TypeError();

    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in t)
        fun.call(thisp, t[i], i, t);
    }
  };
}

如果必须为每个元素执行很多代码,则应考虑使用其他方法:

function processArray(items, process) {
    var todo = items.concat();

    setTimeout(function() {
        process(todo.shift());
        if(todo.length > 0) {
            setTimeout(arguments.callee, 25);
        }
    }, 25);
}

然后调用:

processArray([many many elements], function () {lots of work to do});

那时这将是非阻塞的。该示例摘自 High PerformanceJavaScript



 类似资料:
  • 我有一个小的性能问题,当使用try-catch子句时,最好指定可以获得的确切异常,或者只使用exception它更好?例子: 或者如果你不介意什么样的例外: 因为我知道你可以使用不同的异常来触发不同的效果,但我只是要求性能。

  • 问题内容: 我有充分的理由相信函数rename()和unlink()都是异步的,根据我的理解,这意味着当调用函数时,它们下面的代码在文件系统上完成其过程之前会继续执行。对于互联网应用程序,这是一个问题,我将在下面解释,因为以后的代码取决于这些更改,这些更改已经确定。那么,有没有办法使两者同步,以便代码读取器在遇到这些功能时冻结,直到其所有任务在文件系统上完全执行为止? 这是delete-image

  • 问题内容: 我正在将JSHint用于JavaScript项目(带有Visual Studio Code)。在此项目中,我使用async / await,JSHint将其突出显示为错误。 我尝试设置jshint,但似乎“ esversion”的最大版本为6。 jshint支持异步/等待吗?如果可以,如何打开它?如果没有,是否有任何解决方法? 问题答案: 更新(2019年2月) :从2.10.1版本开

  • 问题内容: 显然,这比我想象的要难找到。而且甚至很简单… 是否有与Javascript中内置的PHP htmlspecialchars等效的功能?我知道自己很容易实现,但是使用内置函数(如果可用)会更好。 对于不熟悉PHP的人,htmlspecialchars可将类似的内容转换为 我知道这一点,因此不能这样工作。 问题答案: 解决方案代码存在问题-它只会转义每个特殊字符的第一次出现。例如: 这是正

  • 问题内容: 我一直在阅读JLS,并且遇到了11.1.3节。我引用的异步异常是: 大多数异常是由于它们所发生的线程的操作而同步发生的,并且在程序中被指定为可能导致此类异常的某个点处发生。相反,异步异常是在程序执行的任何时候都可能发生的异常。 和 异步异常仅由于以下原因而发生: […] * Java虚拟机中的内部错误或资源限制,阻止其实现Java编程语言的语义。在这种情况下,引发的异步异常是Virtu

  • 问题描述 之前做过一个项目,我们使用的是 jsonscheme 来渲染页面。我就在想我能不能直接让使用方提供一个 cdn 的地址,然后我将它的组件渲染出来? 问题出现的环境背景及自己尝试过哪些方法 这里主要是为了做业务解耦,所以 ()=>import 的方式不太适合。 我们用了 jsonscheme 基于配置平台下发实现了动态渲染 也使用了一些开源的低码无码平台。(也可以理解为基于 jsonsch