# These are equivalent
_.defer(fn);
setTimeout(fn, 1);
つまりdefer
、1ミリ秒setTimeout
です。(さらにいくつかの便利な機能がありますが、ここでは重要ではありません。)
JavaScriptには実行ループがあります。シングルスレッドですが、実行はイベントまたはタイマーに基づいて開始および停止します。JSエンジンが起動してコードを実行するたびに、実行ループの1回の反復が開始されます。
つまり、defer
「次の実行ループでこのコードを実行する」ということです。
_.defer(function() { alert('after'); });
alert('before');
これは「前」そして「後」に警告します。これは、現在の実行ループがどのアラートを「前」に終了し、その直後に新しい実行ループが開始してコードを「後」に実行するためです。
したがって、ここにコードがあるが、最初にこのコードの後に発生するコードを実行したい場合は、を使用しますdefer
。
_.defer(functionToRunLast);
functionToRunFirst();
これは、DOMで便利です。変更することもありますが、変更はすぐには解析またはレンダリングされません。実行ループの最後に、ブラウザーはDOMに追いつき、解析してレンダリングします。次に、次の実行ループが開始され、新しくレンダリングされたDOMと対話できます。
(正確にどのシナリオがこの遅延DOM解析を引き起こすのかはわかりませんが、過去に自分のプロジェクトで気づきました。)
DOM対応の代替品ではありません。次の実行ループは、DOMレディが起動する前に発生する可能性があります。これらの概念を混同しないでください。