0

javascript でいくつかのオブジェクトを作成しているときに、オブジェクト内のすべての関数 (プライベート変数を使用できる) が javascript のオブジェクト関数内にあるため、パラメーターを指すだけのプライベート変数を作成するポイントがあるかどうか疑問に思い始めました。

例:普段はこうしています

function Foo(a) {
   var _a = a;
   function something() {
      _a += 1;
      somethingElse(_a);
   }
}

しかし、私には、代わりに次のようにすることができるようです:

function Foo(a) {
   function something() {
      a += 1;
      somethingElse(a);
   }
}

私の質問は、ここで欠けているものや間違っているものはありますか、それとも JavaScript オブジェクトを設計する良い方法ですか?

4

2 に答える 2

1

私の質問は、ここで欠けているものや間違っているものはありますか、それとも JavaScript オブジェクトを設計する良い方法ですか?

_a機能的には、実際には必要のない追加の変数があることを除いて、例に違いはありません。

Loose モードでは、引数への書き込みには名前付きコピー ( ) だけでなく疑似配列も更新する必要があるため、わずかなパフォーマンスの違いが生じる可能性があります。厳密モードでは、2 つ (名前付きバージョンと のエントリ) はリンクされていないため、わずかな潜在的なパフォーマンスの違いはありません。aargumentsarguments

もちろん、これは JavaScript であり、最適化はエンジンによって異なります。たとえば、簡単なテストでは、Chrome では差がなく、Firefox では引数の使用がわずか遅いことがわかります。strict バージョンを使用すると、Firefox での差はなくなります (ただし、非常に小さいため、測定誤差が生じやすい)。(この回答の以前のコピーでは、そのうちの 1 つが IE8 で遅いと言われていましたが、結果を再現できなかったため、測定エラーだったと思います。)

膨大な回数の呼び出しを行わない限り、速度の違いが問題になるとは思いません。something

于 2013-09-13T08:57:30.493 に答える
1

2 つの例の機能に違いはありません。_a 変数は不要です。

ソース: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope

于 2013-09-13T08:54:55.983 に答える