JavaScript ( ES 6 )における変数と定数の理解


古いTimeJavaScriptに問題があった.巻上げとあいまいな変数宣言の間で、あなたのコードのデータを管理することは、JSで本当の問題でありえます.
ありがたいことにES 6から我々は我々の変数と定数が正しく管理されることを確認する新しい方法があります.
どのように動作しているかを見てみましょう.

宣言されていない変数-それをしないでください!


最初の問題は、宣言しないで変数を作成すると、デフォルトでグローバル変数として定義されます.
以下に関数の例を示します:
function declareVar() {
  test = "test";
}

function declareVar2() {
  test = "test 2";
}

declareVar();
console.log(test);// Returns "test"

declareVar2();
console.log(test);// Returns "test 2"

グローバル変数を作成しましたtest , この関数の外側では、declareVar() .declareVar2() 同じ変数を変更します.必ずしも意図したことではない.
変数の宣言をjs strict modeを使用して強制的に指定できます:
`use strict`;
test = "test";
これは、以下のエラーをスローします.
`ReferenceError: num is not defined`
しかし、変数を明示的に宣言することに注意しても、もっと問題があります.

var -あいまいな変数定義


第2の問題は、適切に変数を宣言してもvar , 後で同じ変数を再定義することは可能です.変数名の一貫性を保つのを助けず、コードをデバッグするのはとても難しくなります.
var num = 100;
// Some other code...
var num = 200;
上のコードを見て、既存の変数に新しい値を代入しているかどうかを明確にすることはできません(ただし、それを再宣言するのは間違っています)、あるいは同じ名前の変数を宣言している場合(同じ名前の2つの変数?どちらも悪い.
変数のスコープも問題です.ブロック内の変数を作成すると、混乱を引き起こす可能性があります.ブロックからこぼれ始めます.
console.log(msg);// We can see this variable outside the loop block
for(var i = 0; i < 3; i++) {
    var msg = "Hellow world";
}
巻上げとはmsg , はfor ループは、宣言される前であってもループの外側に表示されます.これはどちらも理想的ではない.
ES 6がこれらの問題を解決するための選択肢として提供するものを見ましょう.

より良い選択肢:constとlet


レットは、変数を宣言するためのクリーナー、エラーエラーの少ない方法です


まず変数を宣言するlet , 同じスコープで2回同じ変数を再定義できません.
let num = 100;
// Some other code...
let num = 200;
ウィルスロー
SyntaxError: Identifier 'num' has already been declared
使用する変数let ブロックスコープもあります.ブロックスコープでは、変数がブロック内で宣言されているコードのブロック外では使用できません{ and } )
このコード:
for(var i = 0; i < 3; i++) {
  let msg2 = "Hellow world";
}
console.log(msg2);
は動作しませんし、ReferenceError : msg2 is not defined , だってmsg2 ループブロックの内部に限られます.
また、変数が宣言されるまで使用できません.
for(var i = 0; i < 3; i++) {
  console.log(msg2);
  let msg2 = "Hellow world";
}
もスローされますReferenceError エラーCannot access 'msg2' before initialization ): msg2 はまだ完全に初期化されていない.
したがって、より論理的なアプローチを使用しなければなりません.また、宣言された後に変数を見ることができます.
for(var i = 0; i < 3; i++) {
    let msg2 = "Hellow world";
    console.log(msg2);
}
クリーナー、読みやすく、あいまいさ.ブーム.

constは変更されない変数です


時々、変数の値が変更されないことを確認する必要がありますそれは不変である必要があります.
この目的のためにconst の代わりにlet . 実際、使用const デフォルトでは、プログラムのライフサイクル上で値を変更する必要がある変数を宣言する必要がない限り.
あなたの定数がオブジェクトへのリファレンスであるならば、気をつけてください、あなたは以下のようにオブジェクトの特性を変えることができます
const client = {name:"John", "number":234};
client.name = "Sue"; // client.name was changed
オブジェクトリファレンスを変更不能にするには、メソッドを使用しますObject.freeze :
const client = Object.freeze({name:"John", "number":234});
client.name = "Sue"; // this will have no effect
console.log(client); // will still output {name: "John", number: 234}
これは最初のレベルでのみ動作しますオブジェクトのプロパティが他のオブジェクトへのリファレンスであれば、Object.freeze 一人一人.
そしてそこに行くと、これはどのようにして変数を宣言する方法です.
私はどのようにコメントのJSであなたの変数を管理するように知ってみましょう.