var, let, const ๊ฐ๊ฐ์ ํน์ง๊ณผ ํธ์ด์คํ ์ ๊ดํด์ ์ ๋ฆฌํฉ๋๋ค.
var
- ๋ณ์ ์ค๋ณต ์ ์ธ์ด ๊ฐ๋ฅํ๋ค
var a = 'a'
console.log(a) // 'a'
var a = 'aa'
console.log(a) // 'aa'
- ํจ์ ๋ ๋ฒจ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ค
var ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํ ๋ณ์๋ ํจ์ ๋ด๋ถ์์ ์ ์ธํ ๊ฒ ์๋๋ผ๋ฉด ์ ์ญ ์ค์ฝํ๋ฅผ ๊ฐ์ง ์ ์ญ ๋ณ์์ด๋ค.
ํจ์ ๋ ๋ฒจ ์ค์ฝํ๋?
ํจ์์ ์ฝ๋ ๋ธ๋ก๋ง์ ์ง์ญ ์ค์ฝํ๋ก ์ธ์ ํ๋ฉฐ ํจ์ ์ธ๋ถ์์ ์ ์ธํ ๋ณ์๋ ์ ์ญ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ค.
- ๋ณ์ ํธ์ด์คํ
var ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ํธ์ด์คํ ๊ณผ์ ์์ ์ ์ธ๊ณผ ์ด๊ธฐํ๊ฐ ๋์ ์ ์งํ๋๋ฉฐ ์ด๋ undefined๋ก ์ด๊ธฐํ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ณ์ ์ ์ธ ์ ์ ํธ์ถํ๊ฒ ๋๋ฉด undefined๊ฐ ์ถ๋ ฅ๋๋ค.
console.log(x) // ํธ์ด์คํ
์ ์ธ๊ณผ ๋์์ undefined๋ก ์ด๊ธฐํ ๋๊ธฐ ๋๋ฌธ์ undefined๊ฐ ์ถ๋ ฅ๋๋ค.
var x = 'global' // ๋ณ์ x์ ๊ฐ 'global' ํ ๋น
console.log(x) // 'global'
ํธ์ด์คํ ์ด๋?
๋ณ์ ์ ์ธ๋ฌธ์ด ์ค์ฝํ์ ์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ง๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ์ ์ญ ๊ฐ์ฒด ํ๋กํผํฐ
var ํค์๋๋ก ์ ์ธํ ์ ์ญ ๋ณ์, ์ ์ญ ํจ์ ๊ทธ๋ฆฌ๊ณ ์ ์ธํ์ง ์์ ๋ณ์์ ๊ฐ์ ํ ๋นํ ์๋ฌต์ ์ ์ญ์
์ ์ญ ๊ฐ์ฒด window์ ํ๋กํผํฐ๊ฐ ๋๋ค.
let, const๋ก ์ ์ธํ ์ ์ญ ๋ณ์๋ window ํ๋กํผํฐ๊ฐ ์๋๋ค
var x = 'global'
y = 'global'
function foo(){}
let z = 'global'
console.log(window.x) // 'global'
console.log(window.y) // 'global'
console.log(window.foo) // foo(){}
console.log(window.z) // let, const๋ก ์ ์ธํ ์ ์ญ ๋ณ์๋ window ํ๋กํผํฐ๊ฐ ์๋๋ค. => undefined
=> ๋ณ์์ ์ค๋ณต ์ ์ธ์ด ๊ฐ๋ฅํ๊ณ ํธ์ด์คํ ์ ์ํด ๊ฐ๋ ์ฑ์ ๋จ์ด๋จ๋ฆฌ๊ณ ์ค๋ฅ๋ฅผ ๋ฐ์์ํฌ ์ฌ์ง๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ข์ง ์๋ค.
let
var์ ๋จ์ ์ ๊ฐ์ ํ๊ณ ์ es6๋ถํฐ ์๋ก ์๊ฒผ๋ค
- ๋ณ์ ์ค๋ณต ์ ์ธ์ด ๋ถ๊ฐ๋ฅํ๋ค
let x = 'global'
let x = 'error' // SyntaxError: Identifier 'x' has already been declared
- ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ค
๋ธ๋ก ์์์ let ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ๋ชจ๋ ์ง์ญ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ ์ง์ญ ๋ณ์์ด๋ค.
let x = 'global'
{
let x = 'local'
let z = 'local'
}
console.log(x) // 'global'
console.log(z) // ReferenceError: z is not defined
function foo(){
let i = 'foo_local'
for(let i=0; i<10; i++){
console.log(i) // 0 ~ 9
}
console.log(i) // 'foo_local'
}
๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ๋?
๋ชจ๋ ์ฝ๋ ๋ธ๋ก(ํจ์, if๋ฌธ, for ๋ฌธ, while ๋ฌธ, try/catch๋ฌธ ๋ฑ)์์ ์ ์ธํ ๋ณ์๋ ์ง์ญ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ค.
- ๋ณ์ ํธ์ด์คํ
let ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ํธ์ด์คํ ์ด ๋ฐ์ํ์ง๋ง ๋ฐ์ํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋์ํ๋ค.
์ด์ ๋ var ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ์ ์ธ๊ณผ ์ด๊ธฐํ๊ฐ ๊ฐ์ด ๋์ง๋ง (undefined)
let ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ์ ์ธ๊ณผ ์ด๊ธฐํ ๋จ๊ณ๊ฐ ๋ถ๋ฆฌ๋์ด ์งํ๋๊ธฐ ๋๋ฌธ์ ๋ณ์ ์ด๊ธฐํ ์ ์ ํธ์ถํ๋ฉด ์ฐธ์กฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์ ์ธ๋จ๊ณ x | ReferenceError |
์ผ์์ ์ฌ๊ฐ์ง๋ TDZ | |
์ด๊ธฐํ ๋จ๊ณ | let x , x = undefined |
ํ ๋น ๋จ๊ณ | x = 'global' |
์ด๊ธฐํ ์ ์ ๋ณ์๋ฅผ ํธ์ถํ ์ ์ฐธ์กฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ์ผ์์ ์ฌ๊ฐ์ง๋(TDZ)๋ผ๊ณ ํ๋ค.
// x ์ ์ธ
console.log(x) // ReferenceError: x is not defined => TDZ
let x; // x = undefined ์ด๊ธฐํ
console.log(x) // undefined
x = 'global' // ๊ฐ ํ ๋น
console.log(x) // 'global'
=> ์ฌํ ๋น ํ์ํ ๊ฒฝ์ฐ์ ์ฌ์ฉ
const
let๊ณผ ๋๋ถ๋ถ ๋น์ทํ๋ค.
- ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ค
- ์ ์ธ๊ณผ ์ด๊ธฐํ
const๋ ์ ์ธ๊ณผ ์ด๊ธฐํ๋ฅผ ๊ฐ์ด ํด์ผ ํ๋ค.
const x = 1
// Error
const y
y = 1
- ํธ์ด์คํ
const ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ํธ์ด์คํ ์ด ๋ฐ์ํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋์ํ๋ค.
- ์ฌํ ๋น ๊ธ์ง
์์ ๊ฐ์ ํ ๋นํ ๊ฒฝ์ฐ ๋ณ์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
ํ์ง๋ง ๊ฐ์ฒด๋ฅผ ํ ๋นํ ๊ฒฝ์ฐ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค. ( ๊ฐ์ฒด๋ ์ฐธ์กฐ ํ์ ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅ )
์์ ๊ฐ์ด๋?
๋ ์ด์ ์ชผ๊ฐค ์ ์๋ ๊ฒ์ผ๋ก number, bigInt, string, null, undefined, boolean, symbol์ด ์๋ค.
=> ์๋์น ์์ ์ฌํ ๋น์ ๋ฐฉ์งํ๊ธฐ ๋๋ฌธ์ ์กฐ๊ธ ๋ ์์ ํ๋ค.
์ ๋ฆฌ
- es6์ ์ฌ์ฉํ๋ค๋ฉด var๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
- ์ฌํ ๋น์ด ํ์ ์๋ ์์ ๊ฐ ๋๋ ๊ฐ์ฒด์๋ const๋ฅผ ์ฌ์ฉํ๊ณ ์ฌํ ๋น์ด ํ์ํ ๊ฒฝ์ฐ let์ ์ฌ์ฉํ๋ค.
'๐ Study Note > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive - ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ (0) | 2022.12.31 |
---|---|
๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive - this (0) | 2022.12.25 |
๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive - ๊ฐ์ฒด ๋ฆฌํฐ๋ด (1) | 2022.12.25 |
๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive - ์คํ ์ปจํ ์คํธ (0) | 2022.12.11 |
๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive - ์ค์ฝํ (0) | 2022.12.08 |