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中文網其他相關文章!