var, let, const
6479 ワード
var
ES 5の前にはvarキーワードのみを使用して変数を宣言できます.
지역 스코프
のみを承認する.let
const
contキーワードとして宣言された変数は、宣言と同時に初期化されます.
がんばって
var
varは宣言前に使用できます.
次の例は、宣言のみがダンプされ、割り当てはダンプされていないことを示しています.
var name;
console.log(name); // undefined
name = '이름';
let
letはHOISTINGにもなります
Hoistingの定義は,Scope内部のどこにおいても変数宣言が最上位宣言のように表現されることである.
しかしなぜletとconstはvarのように働かないのでしょうか?=>原因はTDZの一時的な死角です.
console.log(name); // Reference Error
let name = '이름';
TDZ領域の変数は使用できません.letとconstはTDZの影響を受ける.つまり、配るまでは使えません.これにより、コードを予測し、潜在的なエラーを低減できます.
TDZの正確な定義は、スキャンの開始点から初期化の開始点までの間で変数を参照できない区間を指す.
console.log(name); // TDZ
let name = '이름'; // 함수 선언 및 할당
console.log(name); // 사용 가능
ホイスティンはスコフ単位で発生した.let age = 20;
function ageHandler () {
console.log(age); // TDZ
let age = 10; // 호이스팅 일으킨다
}
ageHandler();
変数の生成と定義
1.宣言フェーズ
2.初期化フェーズ
3.割当手順
var
宣言と初期化を同時に行う.このため,割当て前にコールしてもエラーが発生せず,未定義の場合が発生する.
let
宣言フェーズと初期化フェーズは別々に行われる.これは、呼び出し時に宣言フェーズが行われますが、初期化フェーズは実際のコードに達するとreferenceエラーが発生します.
const
宣言段階と分配は同時に行わなければならない.letとvarは、先に宣言してから割り当てることができます.letとvarは値を変えることができるからです.
contと宣言するとすぐに割り当てられます.
const name; // Uncaught syntax Error
name = '안녕';
スキャン
var:関数スキャン
関数で宣言された変数のみがゾーン変数になります.
if文でvarとして宣言された変数はif文の外でも使用できます.しかしletとconstはブロックスキャンなので不可能です.
const name = '이름';
if (name === '이름') {
var text = '안녕';
}
console.log(text); // '안녕'
varキーワードとして宣言された変数の唯一抜け出すことができない範囲は関数です.let,const:ブロックスキャン
ブロックスキャンで宣言された変数は、(
지역변수
)コードブロック内でのみ有効であり、外部からアクセスできません.関数、if文、for文、try/catch、while文など.
整理する
호이스팅
:変数を宣言および初期化すると、宣言部分が最上位に引き寄せられます.var
は関数レベルスキャン、let
およびconst
はブロックレベルスキャンvar
:繰り返し宣言可能な再割り当て、関数レベルスキャン、宣言前に使用可能、宣言と初期化を同時に実行let
:繰り返し宣言不可、再割り当て可能、ブロックレベルスキャンconst
:繰り返し宣言不可、再割り当て不可、ブロックレベルスキャンletとconstも変数反発になりますが、実行時にコントロールが変数宣言に到達するまで一時的な死角(TDZ)に陥るため参照できません.
変数を宣言する場合はconstがデフォルトで使用され、再割り当てが必要な場合はletが使用されます.
constキーを使用すると、予期せぬ再割り当てを防ぐことができるので、安全です.
-JavaScript Deep Dive
Reference
この問題について(var, let, const), 我々は、より多くの情報をここで見つけました https://velog.io/@ckvelog/var-let-const-82k2npe5テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol