var、let、const、hoisting
var、let、constの違い
var:関数スキャン、Oの再宣言
let:ブロックスキャン、X再宣言、O再割り当て
const:ブロックスキャン、Xの再宣言、Xの再割り当て
varの欠点
var name = '윤정'
console.log(name) // 윤정
var name = '엘리나'
console.log(name) // 엘리나
柔軟な変数宣言が可能です.同じ変数を再宣言してもエラーは発生しません.
これはなぜ欠点なのか。
let,constの登場
varの欠点を補うために、ES 6の後に追加された変数宣言方式
letとconst.
let name = "윤정"
let name = "에러발생" // SyntaxError
name = "엘리나"
console.log(name) // 엘리나
const name = "윤정"
const name = "에러발생1" // SyntaxError
name = "에러발생2" // TypeError
ハウスティンとは何ですか。
JavaScriptでは、いわゆる吊り上げ(hilling).
これは、変数と関数のメモリ領域を宣言する前に、予め割り当てられていることを意味します.
varとして宣言された変数については、呼び出し時にundefinedに初期化します.
逆にletとconstとして宣言された変数については、エスケープ時に
変数を初期化しません.
シースを解釈する際、主に「変数の宣言と初期化を分離した後、
通常は「コードの最上位にのみ宣言」です.
したがって、変数を定義するコードよりも早く使用される可能性があります.
ただし、宣言と初期化を同時に実行すると、
変数を初期化するには、宣言コードを実行する必要があります.
ホストの相手は誰ですか?
宣言は護衛大賞!
優先度
変数の宣言>関数の宣言>変数の割当て
TDZ(Temporal Dead Zone)
var宣言とは異なりletとして宣言された変数
宣言の前に参照すると、参照エラーが発生します.
なぜなら、
let
と宣言された変数はscopeの開始から変数の宣言まで彼らは一時的な死角地帯に陥るからだ.
let
と宣言された変数は、宣言フェーズと初期化フェーズとが別々に行われる.// 스코프의 선두에서 선언 단계가 실행된다.
// 아직 변수가 초기화(메모리 공간 확보와 undefined로 초기화)되지 않았다.
// 따라서 변수 선언문 이전에 변수를 참조할 수 없다.
console.log(foo); // ReferenceError: foo is not defined
let foo; // 변수 선언문에서 초기화 단계가 실행된다.
console.log(foo); // undefined
foo = 1; // 할당문에서 할당 단계가 실행된다.
console.log(foo); // 1
Reference
この問題について(var、let、const、hoisting), 我々は、より多くの情報をここで見つけました https://velog.io/@elinapark/var-let-const-그리고-호이스팅テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol