JavaScript๋ฅผ ์ด์ ๋ง ์์ํ ์๋ฐ๋ฆฐ์ด๋ก์จ, ๋์ค์ ๋ค์ ์ฐพ์๋ณผ ์ ์๋๋ก ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ๐
1. ๋ณ์ ์ ์ธ ๋ฐฉ๋ฒ
๋ณ์ ์ ์ธ๋ฌธ | ์ฌ์ ์ธ | ์ฌํ ๋น | ํน์ง |
let | ๋ถ๊ฐ | ๊ฐ๋ฅ | - ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ - ECMA2015 ๋ฒ์ ๋ถํฐ ์ฌ์ฉ ๊ฐ๋ฅ |
const (constant(์์)) | ๋ถ๊ฐ | ๋ถ๊ฐ | - ๋ณ์ ์ ์ธ์ ๊ฐ์ ๋ฐ๋์ ๊ฐ์ด ๋ฃ์ด์ค์ผ ํจ - ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ - ECMA2015 ๋ฒ์ ๋ถํฐ ์ฌ์ฉ ๊ฐ๋ฅ |
var (variables(๋ณ์)) | ๊ฐ๋ฅ | ๊ฐ๋ฅ | - ์ ๋ถ ๊ฐ๋ฅ (์์ ๋ ๋์) |
1) let
๋ณ์๋ฅผ ์ ์ธํ๊ณ ๊ฐ์ ๋ฐ๊ฟ๋ด ๋๋ค.
let tomato
tomato = "๋ง์์ด";
console.log(tomato);
tomato = "๋นจ๊ฐ์";
console.log(tomato);
/*
์คํ ๊ฒฐ๊ณผ
-----------------------------------
๋ง์์ด
๋นจ๊ฐ์
-----------------------------------
*/
๋ณ์๋ฅผ ์ฌ ์ ์ธ ํด๋ด
๋๋ค.
์ด๋ฏธ ์ ์ธ๋์๋ค๋ ์ค๋ฅ๊ฐ ๋์ค๋ค์. let์ ๊ฐ์ ์ฌํ ๋น์ด ๊ฐ๋ฅํ์ง๋ง ์ฌ์ ์ธ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
let tomato
tomato = "๋ง์์ด";
console.log(tomato);
let tomato = "๊ฟ๋ง"
/*
์คํ ๊ฒฐ๊ณผ
-----------------------------------
let tomato = "๊ฟ๋ง"
^
SyntaxError: Identifier 'tomato' has already been declared
-----------------------------------
*/
2) const
๋ณ์๋ฅผ ์ ์ธํด๋ด
๋๋ค. const๋ ๋ณ์ ์ ์ธ์ ๋ฐ๋์ ๊ฐ์ ๋ฃ์ด์ค์ผํฉ๋๋ค.
์๋ ์ฝ๋์์๋ ๋ณ์๋ง ์ ์ธํ๊ธฐ๋๋ฌธ์ ์ค๋ฅ๊ฐ๋์ค๋ค์.
const banana
banana = "๋
ธ๋";
console.log(banana);
/*
์คํ ๊ฒฐ๊ณผ
-----------------------------------
const banana
^^^^^^
SyntaxError: Missing initializer in const declaration
-----------------------------------
*/
์ด๋ฒ์๋ ๊ฐ์ ๋ฃ๊ณ ์ ์ธํด๋ด ๋๋ค. ์ ์ธ์ด ์ ๋์๋ค์.
const banana = "๋
ธ๋";
console.log(banana);
/*
์คํ ๊ฒฐ๊ณผ
-----------------------------------
๋
ธ๋
-----------------------------------
*/
์ด์ , ์ฌ ํ ๋น์ ํด๋ด
๋๋ค. ๋ฐ๋๋๋ ๋ง์์ด๋ฅผ ๋ฃ์ด๋ณด๊ฒ ์ต๋๋ค.
์ญ์ ์ค๋ฅ๊ฐ ๋๋ค์. const๋ ๊ฐ์ ์ฌํ ๋นํ ์ ์์ต๋๋ค.
const banana = "๋
ธ๋";
console.log(banana);
banana = "๋ง์์ด";
console.log(banana);
/*
์คํ ๊ฒฐ๊ณผ
-----------------------------------
banana = "๋ง์์ด";
^
TypeError: Assignment to constant variable.
-----------------------------------
*/
๋ณ์๋ฅผ ์ฌ์ ์ธ ํด๋ด
๋๋ค. ๋ฐ๋ก ์ค๋ฅ๊ฐ ๋์ค๋ค์.
const๋ ๋ณ์๋ฅผ ์ฌ์ ์ธํ ์๋ ์์ต๋๋ค. (์ง์ญ๋ณ์์์๋..๊ฐ๋ฅ)
const banana = "๋
ธ๋";
console.log(banana);
var banana = "๋ง์์ด";
/*
์คํ ๊ฒฐ๊ณผ
-----------------------------------
var banana = "๋ง์์ด";
^
SyntaxError: Identifier 'banana' has already been declared
-----------------------------------
*/
3) var
var ๋ ์์์ ๋งํ๋ ์ฌ์ ์ธ, ์ฌํ ๋น ๋ชจ๋ ๊ฐ๋ฅํฉ๋๋ค. ์ฌ์ง์ด ์ ์ธ๋๊ธฐ ์ ์๋ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
๋จผ์ , ์ฌ์ ์ธ, ์ฌํ ๋น ํด๋ณด๊ฒ ์ต๋๋ค.
// ๋ณ์ ์ ์ธ
var apple;
apple = "๋ง์์ด";
console.log(apple);
// ๋ณ์ ์ฌ ์ ์ธ
var apple = "์ฌ๊ฐ์ฌ๊ฐ";
console.log(apple);
// ๋ณ์ ์ฌ ํ ๋น
apple = "์์ค๋ฆฌ์ฌ๊ณผ";
console.log(apple);
/*
์คํ ๊ฒฐ๊ณผ
-----------------------------------
๋ง์์ด
์ฌ๊ฐ์ฌ๊ฐ
์์ค๋ฆฌ์ฌ๊ณผ
-----------------------------------
*/
์ ์ธ ์ ์ ์ฌ์ฉ๋ ๊ฐ๋ฅํฉ๋๋ค.
์์ let, const, var ๊ฐ์ด ํ์ธํด๋ด
๋๋ค.
// let ์ ์ธ์ ์ฌ์ฉ
console.log(test_let);
let test_let = "B";
/*
์คํ ๊ฒฐ๊ณผ
-----------------------------------
console.log(test_let);
^
ReferenceError: Cannot access 'test_let' before initialization
-----------------------------------
*/
// const ์ ์ธ์ ์ฌ์ฉ
console.log(test_const);
const test_const = "A";
/*
์คํ ๊ฒฐ๊ณผ
-----------------------------------
console.log(test_const);
^
ReferenceError: Cannot access 'test_const' before initialization
-----------------------------------
*/
// var ์ ์ธ์ ์ฌ์ฉ
console.log(test_var);
var test_var = "C";
/*
์คํ ๊ฒฐ๊ณผ
-----------------------------------
undefined
-----------------------------------
*/
2. Scpoe(์ ํจ๋ฒ์)
์ ๋ณ์๋ฅผ ์ ์ธํด์ผํ ๊น? ๋ผ๋ ์๋ฌธ์ด ๋ค์์ต๋๋ค. ์๋ํ๋ฉด ๋จ์ํ ๋ณด๋ฉด ๋ณ์์ ์ธ ์์ด๋ ์ฌ์ฉ ๊ฐ๋ฅํ๊ธฐ๋๋ฌธ์ ๋๋ค.
a="a"
var b="b"
console.log(a, b);
/*
์คํ ๊ฒฐ๊ณผ
-----------------------------------
a b
-----------------------------------
*/
์ค์ฝํ๋, ๋ณ์๊ฐ ํ๋ํ ์ ์๋ ๋ฒ์๋ฅผ ๋งํฉ๋๋ค.
๋ณ์์ ๋ฒ์๋ฅผ ํ์ธ ํ๊ธฐ ์ํด ์๋์ ์ฝ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
const area1 = "A";
let area2 = "B";
var area3 = "C";
function func() {
const area4 = "D";
let area5 = "E";
var area6 = "F";
const area1 = "a"; // area1 ๋ณ์ ์ฌ ํ ๋น
area7 = "G";
console.log("ํจ์๋ด๋ถ์์ ์คํ:",area1,area2,area3,area4,area5,area6,area7)
}
console.log("ํจ์์ธ๋ถ์์ ์คํ:",area1,area2,area3)
func();
/*
์คํ ๊ฒฐ๊ณผ
-----------------------------------
ํจ์์ธ๋ถ์์ ์คํ: A B C
ํจ์๋ด๋ถ์์ ์คํ: a B C D E F G
-----------------------------------
*/
- ์ ์ญ๋ณ์(Global) : ์ฝ๋ ๋ด ์ด๋์๋ ์ฌ์ฉ ๊ฐ๋ฅ
์ ์ญ๋ณ์๋ ์ ๋ณ์ ์ค area1, area2, area3์ ํด๋นํฉ๋๋ค.
์ ์ญ๋ณ์๋ ํจ์ ๋ฐ์ ์ ์ธ๋ ๋ณ์์
๋๋ค.
- ์ง์ญ๋ณ์(local) : ํจ์ ์์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
์ง์ญ๋ณ์๋ ์ ๋ณ์์ค area4, area5, area6, area7์ ํด๋นํฉ๋๋ค.
area1 ๋ณ์๋ ์ ์ญ๋ณ์์์ ์ด๋ฏธ ์ ์ธํ์ผ๋, ์ง์ญ๋ณ์์์ ํ๋ฒ ๋ ์ ์ธํฉ๋๋ค.
๊ทธ ๊ฒฐ๊ณผ ํจ์ ์์์ ์คํ๋ ๋ ์ง์ญ๋ณ์๊ฐ ์ฐ์ ํฉ๋๋ค.
์ง์ญ๋ณ์์์ ์ ์ธํ ํจ์๋, ํจ์ ์ธ๋ถ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค (not defined error)
- ์ ๋ฆฌ
1) ๋ณ์๋ ์ ํจ๋ฒ์(Scope)๋ฅผ ๊ฐ์ง๋๋ค.
2) ํฌ๊ฒ ์ ์ญ๋ณ์(Global variable), ์ง์ญ๋ณ์(Local variable)๋ก ๋๋ฉ๋๋ค.
3) ๋๋๋ ๊ธฐ์ค์ ํจ์๋ฒ์, ํจ์ ๋ด๋ถ์์ ์ ์ธ๋ ๋ณ์๋ฅผ ์ง์ญ๋ณ์๋ผ๊ณ ํฉ๋๋ค.
4) ํจ์ ๋ด๋ถ, ํน์ ๋ธ๋ก๋ฌธ(if ๋ฑ)์์ ๋ณ์๋ฅผ ์ฌ์ฉํ ๋, ํจ์ ๋ด๋ถ ํน์ ๋ธ๋ก๋ฌธ ๋ด๋ถ์์ ๋ณ์๋ฅผ ์ฐพ๊ณ , ๋ด๋ถ์ ์๋ค๋ฉด ๊ธ๋ก๋ฒ ๋ณ์๋ฅผ ์ฐพ๊ณ , ๊ธ๋ก๋ฒ ๋ณ์๊ฐ ์๋ ๊ฒฝ์ฐ ๋์ ์ผ๋ก ํ ๋นํ์ฌ ์ฌ์ฉํฉ๋๋ค. (area7 ํ์ธ)
5) ์ง์ญ๋ณ์๋ ํจ์ ๋ด์์ ์ ์ญ๋ณ์๋ณด๋ค ๋ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋๋ค.
์ ๋ง ์๊ธฐ ์ฝ๊ฒ ์ค๋ช ํด์ฃผ๋ ์ ํญ์๋ฃ๊ฐ ์์ด์~ ์ดํด ์๊ฐ๋๋ ๋ณต์ตํ๊ธฐ~~!
www.youtube.com/watch?v=HsJ4oy_jBx0