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 中国語 Web サイトの他の関連記事を参照してください。