์๋ฐ์คํฌ๋ฆฝํธ์ ๋ณ์ ๋ฐ ์์ ์ ์ธ ํค์๋ ์ ๋๋ค.
var
- ์ด๊ธฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ณ์ ์ ์ธ์ var ๋ง์ ์ฌ์ฉ ํ์ต๋๋ค.
var ํน์ง
- ํจ์ ๋ ๋ฒจ ์ค์ฝํ(Function Level Scope) ๋๋ ์ ์ญ ์ค์ฝํ
var a = "a";
function example() {
var b = "b";
console.log(a); // a ์ ์ญ๋ณ์. ์ถ๋ ฅ๊ฐ๋ฅ.
if (true) {
var c = "c";
console.log(b); // b - ํด๋น ํจ์ ๋ด ์ ์ธํ ๋ณ์. ์ถ๋ ฅ ๊ฐ๋ฅ.
}
console.log(c); // c - ํด๋น ํจ์ ๋ด ์ ์ธํ ๋ณ์. ์ถ๋ ฅ ๊ฐ๋ฅ.
}
example();
// var๋ ๋ณ์์ ์ค๋ณต ์ ์ธ ๊ฐ๋ฅ
var name = "kim";
console.log(name); // kim
var name = "lee";
console.log(name); //lee
//๊ฐ์ ์ฌํ ๋น์ด ๊ฐ๋ฅ
var a = 10;
a = 20;
console.log(a); // 20
//์ ์ธํ๊ธฐ ์ ์ ์ฌ์ฉ์ด ๊ฐ๋ฅ
function sayHi() {
phrase = "Hello";
alert(phrase);
var phrase;
}
sayHi();
ํ์ง๋ง var ๋ ๋ฌธ์ ์ ์ด ๋ง๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ์์ ํฉ๋๋ค.
- ๋๋ถ๋ถ์ var์ ํน์ง์ด ์ข์ง ์์ ๋ถ์์ฉ์ ๊ฐ์ ธ์ต๋๋ค.
- ์ด์ฐฝ๊ธฐ์๋ ์ ์ฐ์ฑ์ ์ด์ฉํ์ฌ ํ๋ก๊ทธ๋จ์ ์์ฑ ํ์์ง๋ง, ์ด๋ ์ ๋์ด ๊ท๋ชจ์๋ ํ๋ก์ ํธ๋ฅผ ํ๋ค ๋ณด๋ฉด
์ ์ธํ์ง ์๋ ๊ฐ๋ค์ด ํ ๋น ๋์ด์ ธ ์์ ์๋ ์๊ณ ์ํ ๋ถ๋ด์ด ํฝ๋๋ค.
let
- ES6(ES2015)๋ถํฐ let๊ณผ const๊ฐ ์ถ๊ฐ ๋์์ต๋๋ค.
let ํน์ง
- ์ค๋ณต ์ ์ธ ๋ถ๊ฐ๋ฅ
let a = 10; let a = 20; // SyntaxError: Identifier 'a' has already been declared
- ๊ฐ์ ์ฌํ ๋น ๊ฐ๋ฅ
let b = 111; b = 222; console.log(b); // 222
- let ์ ํจ์ ๋ด๋ถ๋ ๋ฌผ๋ก , if๋ฌธ์ด๋ for๋ฌธ ๋ฑ์ ์ฝ๋ ๋ธ๋ญ{ ... } ์์ ์ ์ธ๋ ๋ณ์๋ ์ง์ญ๋ณ์๋ก ์ทจ๊ธ ํฉ๋๋ค.
๋ธ๋ญ ๋ ๋ฒจ ์ค์ฝํ(Block Level Scope)
let a = "a";
function example() {
let b = "b";
console.log(a); // a ์ ์ญ๋ณ์. ์ถ๋ ฅ ๊ฐ๋ฅ
if (true) {
let c = "c";
console.log(b); // b ํด๋น ํจ์ ๋ด ์ ์ธํ ๋ณ์. ์ถ๋ ฅ ๊ฐ๋ฅ
}
console.log(c); // ReferenceError: c is not defined
}
example();
const
- ํ ๋ฒ ๊ฐ์ ์ ์ธํ๋ฉด ์ ๋ ๋ฐ๋์ง ์์ต๋๋ค. (์์)
const ํน์ง
- ์ค๋ณต ์ ์ธ ๋ถ๊ฐ๋ฅ
const b = 10; const b = 20; // SyntaxError: Identifier 'b' has already been declared
- ๊ฐ์ ์ฌํ ๋น์ด '๋ถ๊ฐ๋ฅ'
const c = 111; c = 222; // TypeError: Assignment to constant variable.
- const๋ ํจ์ ๋ด๋ถ๋ ๋ฌผ๋ก , if๋ฌธ์ด๋ for๋ฌธ ๋ฑ์ ์ฝ๋ ๋ธ๋ญ{ ... } ์์ ์ ์ธ๋ ๋ณ์๋ ์ง์ญ๋ณ์๋ก ์ทจ๊ธ ํฉ๋๋ค.
๋ธ๋ญ ๋ ๋ฒจ ์ค์ฝํ(Block Level Scope)
์ ๋ฆฌ
- ๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ ์ ๋ฌด
- var๊ณผ let์ ๊ฐ์ด ์ ์ธ๋ ์ดํ์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ง๋ง, const๋ ์์ฑํ ๋ ์ ์ธ๋ ์ด๊ธฐ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- ํจ์์ค์ฝํ vs ๋ธ๋ก์ค์ฝํ
- var์ ํจ์ ์ค์ฝํ๋ฅผ ๊ฐ์ง์ง๋ง, let๊ณผ const ๋ณ์๋ ๋ธ๋ก ์ค์ฝํ๋ฅผ ๊ฐ์ง๋๋ค.
- ์ค๋ณต ์ ์ธ์ var๋ง ๊ฐ๋ฅ ํฉ๋๋ค.
์ฐธ๊ณ
'๐ Front-End > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ ์ปจํ ์คํธ(Execution Context) (0) | 2022.11.16 |
---|---|
๋ณ์ ์ ์ธ, ์ด๊ธฐํ, ํ ๋น (0) | 2022.11.16 |
๋ณ์(variable) (0) | 2022.11.16 |
JavaScript (0) | 2022.11.16 |
Spread ์ฐ์ฐ์ (0) | 2022.10.22 |