JavaScript 中的 Array.forEach 是异步的吗?
与 Node.js 中的异步版本不同,JavaScript 中的原生 Array.forEach 实现会运行同步地。这意味着,当您使用执行密集操作的函数对数组调用该函数时,浏览器将阻塞,直到处理完所有元素。
为了更好地理解此操作,让我们检查一下 forEach 算法的规范:
<code class="javascript">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); } }; }
此代码演示了 forEach 迭代数组的所有元素,在主线程内同步调用为每个元素提供的函数。
异步处理的替代方案
如果您的代码需要非阻塞操作,您可以考虑替代方法:
使用 setTimeout:
<code class="javascript">function processArray(items, process) { var todo = items.concat(); setTimeout(function () { process(todo.shift()); if (todo.length > 0) { setTimeout(arguments.callee, 25); } }, 25); }</code>
以上是JavaScript 的 Array.forEach 是同步还是异步?的详细内容。更多信息请关注PHP中文网其他相关文章!