ホームページ >ウェブフロントエンド >jsチュートリアル >一度だけ実行される関数を JavaScript で構築するにはどうすればよいですか?
一度だけ実行できる関数を JavaScript で作成する方法
JavaScript は本質的に、一度だけ実行できる関数を作成する方法を提供しません。一度実行します。ただし、クロージャとサードパーティ ライブラリを使用した洗練されたソリューションがあります。
クロージャ メソッド:
クロージャは、クロージャに含まれる関数からアクセスできるプライベート スコープを作成します。 。この範囲内で、関数が実行されたかどうかを示すフラグを設定できます。次のコードは、このアプローチを示しています。
<code class="javascript">var something = (function() { var executed = false; return function() { if (!executed) { executed = true; // do something } }; })();</code>
初めて something() を呼び出すと、関数が呼び出され、実行された設定が true に設定されます。後続の呼び出しは、executed が true のままであるため、効果がありません。
サードパーティ ライブラリ メソッド:
Underscore や Ramda などのライブラリは、指定された関数をラップする Once() 関数を提供します。
<code class="javascript">// Using Underscore var one_something = _.once(something); // Using Ramda const one_something = R.once(something);</code>
返された関数は複数回呼び出すことができますが、基になる関数は初回のみ実行されます。
関数を作成するためのユーティリティ-Time 関数:
ライブラリを使用していない場合は、カスタム ユーティリティ関数を作成できます。 1 つのアプローチは次のとおりです。
<code class="javascript">function once(fn, context) { var result; return function() { if (fn) { result = fn.apply(context || this, arguments); fn = null; } return result; }; }</code>
この関数は関数と、オプションでコンテキストを受け入れます。最初の呼び出しで元の関数を実行し、結果を返す関数を返します。それ以降の呼び出しは効果がありません。
以上が一度だけ実行される関数を JavaScript で構築するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。