var


JavaScriptのlet出現背景
html、css、javascriptを独学で学習したため、制作時間の長いコンテンツを頻繁に使用して学習せざるを得なかった.だから私にとって、変数宣言はvarで、何が起こったのか分からないが、最新の内容がletを書いたのを見た.だから遅れてはいけないので、すばやく理解しました.
Hoistingの概念
Hoistは「持ち上げる」という意味で、JavaScriptでは、Hoistingは関数の実行前のすべての変数を巡り、事前に覚えておくために最上位に置きます.これはどういう意味なのか、例を見てみましょう.
varでのエラー
var a = 1;
var name = "donghyun";
var age = 28;
console.log(age)

출력값:
28
これが通常のJavaScript符号化であり,異常のない完全符号化である.
コンソールもlog(age)は、28の値を問題なく出力する.
console.log(a)
var a = 1;
console.log(a)

출력값:
undefined
1
これはどうですか.最初の行は変数を宣言する前なので、エラー値を出力するのは当然です.
しかし、あまりにも慈悲深いJavaScriptは間違いなく「undefined」に初期化されます.
どうしてこんなことになったの?ここにはハウスティンが現れます.JavaScriptエンジンは実行前に一度ブラウズしたことがあるので、a=1であることを覚えています.だから間違いというよりも、すでに分かっていて、今は変数を宣言する前なので、知っていても知らないふりをしているのは気を使っているのです.これはなぜ問題になるのか.
console.log(a)
a = 1
var a
console.log(a)

출력값:
undefined
1
この非通話符号化では、エラーは発生せず、undefinedを出力した後に4行目の値1を出力します.人間味のあるJavaScriptですが、他の言語に対しては無言で間違えられています.言い換えれば問題がある.
グローバル変数と領域変数の概念が不明確である
もう1つの問題は、グローバル変数と領域変数を区別できないことです.グローバル変数とは、{}などのブロック外で宣言される変数であり、任意の場所で使用できる変数を指し、領域変数はif、forなどのブロック内で宣言され、他の場所では使用できない変数である.
for(var i = 1; i < 5 ; i++){
	console.log(i)
}
console.log(i)

출력값:
1
2
3
4
5
どうでもいい出力5が見えます.関数内に位置する領域変数のみを識別し、残りの変数はシャーグリダグローバル変数として選択されます.
var a = 1
console.log(a)
var a = 2
console.log(a)

출력값:
1
2
変数間では重複は許可されませんが、これも許可されています.
そのため、JavaScript開発者はこれらの問題に気づき、letという変数宣言を作成します.
letの出現
letは以前varが犯したエラーを処理しようとするので、迷わずエラー値を出力します.
console.log(a)
let a = 1;
console.log(a)

출력값:
Uncaught ReferenceError: a is not defined
    at <anonymous>:1:13
定義されていないことを彼に伝えて、
console.log(a)
a = 1
let a
console.log(a)

출력값:
VM208:1 Uncaught ReferenceError: a is not defined
    at <anonymous>:1:13
これも定義されていません.
しかし、これはLetが給油しないという意味ではありません.
ただし、変数を定義する前に出力する必要がある場合は、TDZ(Temporal Death Zone)と見なし、aが変数を宣言する前にaにアクセスできないことを通知します.すなわち、接近禁止処分を与える.
次の例を見続けると
for(let i = 1; i < 5 ; i++){
	console.log(i)
}
console.log(i)

출력값:
1
2
3
4
instrument.ts:113 undefined
let a = 1
console.log(a)
let a = 2
console.log(a)

출력값:
Uncaught SyntaxError: Identifier 'a' has already been declared
aが定義されていることを彼らに伝えます.
の最後の部分
このようにletも調整されていますが、出力面では厳しい基準があります.
varのエラーを解決するために現れたが、これはvarを書かずにletだけを書くようにしただけだ.
これからはletだけ使いましょう!