TIL.変数を定義する方法Var、Const、Let


1.変数定義方法var


ES 5までのJavaScriptではvarを使用して変数を定義するのが唯一の方法です.
ES 6は、constおよびletを用いて変数を定義する新しい方法を生成する.これはvarにいくつかの問題があるからです.
varに何か問題がありますか?
varの問題
1)関数スキャン
var定義の変数は함수 스코프である.スコプフとは変数が使用できる分野を指す.
function example(){
  var i=1;
}
console.log(i)//참조에러
上のコードのように、スキャンから外れて変数を使用するとエラーが発生します.
function example1(){
  i=1;//var 키워드 없이 변수를 정의하면 전역변수가 된다.
}
function example2(){
  console.log(i);
}
example1();
example2();//1이 출력됨
var変数を関数ではなくプログラムの外に定義すると、グローバル変数となり、プログラム全体を囲む関数があると考えれば理解しやすい.
特に、varキーワードを関数に使用せずに変数に値を割り当てると、その変数はグローバル変数になります.
for( var i=0;i<10; i++){
 console.log(i);
}
console.log(i)//10
varは関数スキャンであるため、for繰返し文で定義された変数は、繰返し文の終了後も問題があります.
2)給油
varとして定義された変数は、その属するscopeの最上位レベルに昇格します.
console.log(myVar);//undefined
var myVar=1;
変数を定義する前に変数を使用します.ただし、出力は定義されていません.これは、変数の定義が上向きに引かれているためです.
var myVar=undefined;
console.log(myVar);//undefined
myVar=1;
以上が護衛の結果
console.log(myVar);//undefined
myVar=2;
console.log(myVar);//2
var myVar=1;
=>変数の定義のみを上げ、元の定義の位置に値を割り当てます.特に、以下に示すように、変数定義の場所で値を指定することができる.
欠点は、エラーに見える上記のコードが間違いなく使用できることです.コード作成は直感的ではなく,通常のプログラミング言語では見つけにくい性質である.
3)var変数は再定義可能
var myVar=1;
var myVar=2;
定義変数は共通であり、これは、これまでにない変数を作成することを意味します.したがって、上記のコードは間違いなく使用でき、エラーを引き起こす可能性があります.

2.var問題を解決するconst、let


1)ブロックスキャン
関数スキャンの欠点の大部分はブロックスキャンではない.
if(true){
  const i=0;
}
console.log(i)//참조에러
ブロックミラーでは、if文のブロックで定義された変数がif文から離れるときに参照できません.
let foo='bar1';
console.log(foo);//bar1
if(true){
  let foo='bar2';
  console.log(foo);//bar2
}
console.log(foo);//bar1을 출력
2)給油
console.log(foo);//참조에러
const foo=1;
同じ場合、varはエラーしません.したがってconst,letで定義された変数は転義されないと容易に考えられる.でも!cont,letで定義した変数もハイライトされます.
ただし、変数定義の位置とネストされた位置の間で変数を使用しようとすると、エラーが発生します.この段落は임시적 사각지대(TDZ)と呼ばれています.
一時的な死角地帯で変数が使用できない場合、護衛の役割は何ですか?
const foo=1;//2
{ 
  console.log(foo);//참조에러 3
  const foo=2;//1
}
1番変数が番号付けされていない場合、参照エラーは発生せず、2番変数の値が出力されます.1番変数の反発により,3番変数は1番変数を参照する.また、1番変数を参考にしていますが、仮死角なのでエラーが発生します.
3)contによって定義された変数のみが再割り当てできないことを許可する.
contとして定義された変数は再割り当てできません.逆にlet,varとして定義された変数は再割り当て可能である.
注:実戦反応プログラム設計