第TIL JS 2日目


変数の内容
『Dream Code by Elly』のjs三説

可変変数


ES 6の前に変数を宣言するときにvarを使用します.
ES 6からlet、constが出てきました.
その前に知っておくべきことです.

* block scope


MDN Blockドキュメント
let GlobalName = 'global';
{
    console.log(GlobalName);
    GlobalName = 'hello';
    console.log(GlobalName);
    let LocalName = 'local';
    console.log(LocalName);
}
console.log(LocalName); //error 블록안에는 지역변수로 할당됨.


var x = 1;
{
  var x = 2;
}
console.log(x); // 콘솔에 2를 출력합니다


const c = 1;
{
  const c = 2;
  //const인데 중복된 이름의 변수를 선언했음에도 에러 출력 x
}
console.log(c); // 1이 콘솔에 찍히며, SyntaxError 예외가 발생하지 않습니다.
varはブロックを含まない.letconstは荷物です.
for,ifなどの構文でBlock Scopeを使用する場合も同様である.

varとletの違い


var


MDN varドキュメント
  • no block scope(グローバル有効範囲)、function-level scope(関数で宣言される変数は領域変数)
  • Var Hoisting
  • 繰り返し宣言
  • varのライフサイクルはこうです.

    宣言と初期化が同時に完了し、割り当てが完了します.
    ソース:https://dmitripavlutin.com/variables-lifecycle-and-why-let-is-not-hoisted/

    let


    MDN letドキュメント varのプロパティを使用して緩やかに記述できますが、エラーやメモリの漏洩の原因になる可能性があるため、letを使用する必要があります.
  • ブロック有効領域(ブロック単位有効範囲)
  • hoisting O
  • 2-1. TDZ-仮死角O
  • ブロック単位で再宣言(重複宣言)できない
  • letのライフサイクルはこうです.

    宣言と初期化は同時に行われず、初期化前にTDZが適用されます.
    ソース:https://dmitripavlutin.com/variables-lifecycle-and-why-let-is-not-hoisted/
    TDZが初期化前に変数にアクセスすると、参照誤差が発生します.

    const


    変数をcontとして宣言するには、ポインタメモリをロックします.
    再割り当て、再宣言できません.
    「+」という文章に書かれていないhostingとTDZに関する内容はキーワード記事にあります.
    リンク:https://velog.io/@yogongman/TDZ-Temporal-Dead-Zone