2017-02-11 4 views
0

私はこのタイトルが怖いと思うが、そうではありません。ごめんなさい!なぜ人々は変数を使用するのですか?

これで、ワンタイムのみ/変更不可能な「変数」を作成する際のポイントは何ですか?

Personオブジェクトに "name"というプロパティが1つあります。

const Person = { 
    name: 'Luis Felipe Zaguini' 
}; 

いいえ。したがって、これを行う人々を見ることは非常に一般的です。

let personName = Person.name; 
console.log(`I've written my name, and it is ${personName}.`); 

これだけです。大半の場合、変数は1回だけ使用されます。あるいは、時には他のステートメントで参照されることもありますが、新しい変数を設定せずに参照する方法があるので、無駄です。

Tecnically、あなたは、実際には、タイプPerson.name複数回、およびこれを行うことができるので、無駄な何かのためにメモリを割り当てる、CPUのメモリを無駄にしている。また

console.log(`I've written my name, and it is ${Person.name}.`); 

を、あなたは時間を無駄にしていると追加しますあなたのコードにもっと多くの行。私は誇張していますか?プログラマーの多くはこのようなことをしていますが、個人的には私にはうまく合わないようです。

+2

私はどこから来ているのか見ていますが、私は最適化の前に読みやすさがあるというルールを決めました。 JavaScriptビルドシステム(または他の言語)では、これらの小さな方法でコードを縮小/最適化するためにツールに頼ることができます。それに加えて、 'const'を使うと、変数が変更されないことを読者に知らせる。 –

+0

実際、Person.nameを再割当てすることができ、それはpersonNameに反映されるが、質問のためにletに変更した。私はあなたの側を持って、読みやすさは大きな問題です、特にデバッグ時。 –

答えて

7

理由A「const`変数は、例えば、誤って変更から値を防止する

  1. 任意の数が存在します直後のスコープ外でアクセス可能な変数を含むclosureを作成している場合は、

  2. Javascriptエンジンは、非常に一般的なコンパイラの最適化であるcommon subexpression eliminationをまだ使用できません。一時変数を使用すると、this exampleのようにパフォーマンスが向上する可能性があります。

  3. 異なる名前の変数が機能を明確にすることがあります。 Writing Really Obvious Code (ROC)を参照してください。例:

    var activeUsername = User.name; //It's not just a user's name, it's the active user's name! 
    
  4. 時々、余分な変数があるとき、あなたは私がoverractingアム割り当て

中に別のブレークポイントを設定したいデバッグ/見変数

  • にそれが容易になりますことを?

  • はい。

    0

    私は個人的にこれをしません。しかし、あなたが尋ねたように、これは私の考えです。

    const Person = { 
        name: 'Luis Felipe Zaguini' 
    }; 
    const personName = Person.name; 
    personName = personName + " rick"; //As in they want to make some changes to the name but they don't want to change the main object i.e Person 
    console.log(`I've written my name, and it is ${personName}.`); 
    

    私は個人的にこれを行うことをお勧めします。 ここで、名前を変更する場合は、メインオブジェクトを直接変更する必要があります。あなたがコードのどこかでそれを使用している可能性があるので、少し危険です。

    const Person = { 
        name: 'Luis Felipe Zaguini' 
    }; 
    console.log(`I've written my name, and it is ${Person.name}.`); 
    
    +1

    定数の参照は変更できませんが、そのプロパティは変更できます。 'const Person = {name: 'Luis'};'を宣言すれば、それを再割り当てして 'Person = {name: 'Rick'}'と言うことはできません。あなたはしかし、プロパティを変更することができます。 'Person.name = 'Rick''は有効です。 –

    0

    このようなアプローチは、ルックアップを行わないように値をキャッシュすることを目的としている可能性が最も高いです。これは一般的に問題ではありませんが、ドット表記や配列値のインデックス付けを使用すると、わずかなオーバーヘッドが発生します。

    開発者は、コードの一部を明確にするためにこれを行うことを選択した可能性があります。

    最後に、開発者はちょうど不調かもしれません。

    すべてのケースで、考えられる利点や副作用は、使用しているJavaScriptエンジンとその最適化の種類によって異なります。

    0

    友人、ここであなたはオブジェクトのプロパティと変数を混同しています。たとえば、name = "foo"は意味がなく、直接使用することができます。 Person.name = "foo"は名前プロパティ値がfoo.C#であるPersonを意味し、オブジェクトについてはすべてのものであり、finallyコードブロックでは常にメモリを解放できます。希望は私は明確です:)

    +1

    質問を再読み込みする必要があると思いますが、これはC#と何が関係していますか? OPは、オブジェクトのプロパティと通常の変数との間で混乱することはありません。 –

    0

    私はあなたの質問を持っていると思います。この値は、データベースへの複数回のラウンドトリップを防ぎ、複数回使用する場合に式を解決するのに費やされる時間を節約するため、直接isを使用する代わりに変数に格納されます。たとえば。あなたのケースでは、毎回Person.nameを解決するのではなく、複数のrefrencesがコード内にある場合、Compilerは変数からPerson.nameを読み込むことを好みます。

    関連する問題