2017-12-30 93 views
1

私は関数を1回だけ実行したいです。私はここでthis questionを見つけました。最高の投票例は関数を再定義し、一度実行するはずのコードを実行します。コードを実行してから関数を再定義するのではなく、そのような理由があると確信していますが、それが何であるか把握することはできません。私の最初の本能は、コードが再定義される前に実行されていなければならないので、コードが実行された後に関数を再定義することだけです。一度だけ実行する関数を作成する場合、関数の前後で再定義を行う必要がありますか?

誰かがコンベンションを最初に再定義するように思われる理由を説明できますか?

+0

質問に関連する言語タグを追加してください。 –

+0

もしあなたが 'javascript'について話しているのであれば、スレッド化がないために違いはありません。ただ一つのイベントループだけです。あなたの関数は複数のスレッドから同時に呼び出すことはできません。 jsのイベントループの詳細については、https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop – ironstone13

+0

を参照してください。マルチスレッド環境で複数回実行されるのを防ぐためです。意味をなさない!はい、私はJavaScriptを使用していますが、それは一般的な問題だと思ったので、私はそれをやめました。私は、その質問がより広く適用されるにもかかわらず、その広範な使用のためにJSタグを追加しました。返信いただきありがとうございます。 –

答えて

-1

主な理由はマルチスレッド言語のようです。関数が一度だけ実行され、最初のインスタンスが完了する前に関数が2回目に呼び出されると、その関数は複数回呼び出されます。それを最初に定義し直すと、関数が2回実行できなくなります。

+0

JSはマルチスレッドではありません。また、マルチスレッド言語では、可能な限り速やかに無効化を行うことで、競合状態の可能性を減らすことができますが、適切な解決策として、セマフォーまたはアトミック操作が必要です。 – Bergi

+0

私はJSがマルチスレッドであるとは言いませんでした。元の質問へのコメントに記載されているように、JSの場合、順序は関係ありません。私は自分自身の質問に答えているので、この質問を見つけた人は、なぜ機能を再定義するのが最初に行われるのかについての根拠があります。 –

0

基本的に、関数が2回呼び出されるのを避けるには、最初の呼び出しの直後に関数を無効にするのが最も安全です。呼び出しと不能者の間に何も起こらない場合、予期しないことは起こりません。

  • コードを再帰的関数を呼び出し、またはコールバックを通して - あなたは投げるんreentrancy
  • コードを検討する必要があります。あなたが最初の一度だけ実行する必要があるコードを実行した場合、いろいろなことが起こるかもしれません例外
  • コードreturnの初期の
これらのいずれの場合においても

、そしておそらくよりは、無効コードは達していないと2番目の呼び出しを作ることができます。

また、関数を置き換えるだけでは不十分であることにも注意してください。呼び出し元は、他の変数をnoop関数に設定しても元の関数を保持する別名変数を簡単に作成することができます。呼び出しコードを制御して何が行われているかを知っていない限り、常にこのソリューションをaccepted answerからの "静的ブール変数"アプローチと組み合わせる必要があります。

関連する問題