let
๐โ๏ธ Variable์ read ์ฝ๊ณ , write ์ฐ๊ธฐ๊ฐ ๋ชจ๋ ๊ฐ๋ฅ!
๐๐ปโโ๏ธ JS์์ ๋ณ์๋ฅผ ์ ์ธํ ๋๋ let
์ด๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํ๋ค! (ES6์ ์ถ๊ฐ๋ ๊ธฐ๋ฅ)
let name = "solmi";
console.log(name);
name = "hello";
console.log(name);
โ๏ธJS์์ let
์ ์
๋ ฅํ๊ณ name
์ด๋ผ๋ ๋ณ์๋ฅผ ์ ์ธํ ํ, ๊ทธ ์์ solmi๋ผ๋ ๋ณ์์ ๊ฐ์ ํ ๋นํ๋ค!
โ๏ธname
์ด๋ผ๋ ๋ณ์๋ฅผ ๋ค์ ์ ์ธํ๊ณ , ์ด๋ฒ์๋ hello๋ผ๋ ๊ฐ์ ํ ๋นํ๋ค!
๋ธ๋ผ์ฐ์ ์ ๊ฒ์ฌ(๊ฐ๋ฐ์ ๋๊ตฌ) - console ๊ธฐ๋ฅ์ ์ด์ฉํด๋ณด๋ฉด ์ด๋ ๊ฒ ๋ฌ๋ค!!
๐คท๐ปโโ๏ธ ๊ทธ๋์ ๋ฌด์จ์ผ์ด ์ผ์ด๋ฌ๋ค๋ ๊ฑฐ์?
1. ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ฉด, ์ดํ๋ฆฌ์ผ์ด์ ๋ง๋ค ์ฌ์ฉํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๋ค.
(ํ ํ ๋น์ด์๋ ๋ฐ์ค์ด๋ฉฐ, ์ดํ๋ฆฌ์ผ์ด์ ๋ง๋ค ์ด ๋ฐ์ค๊ฐ ์ ํ์ ์ผ๋ก ํ ๋น๋จ)
2.let name
์ด๋ผ๋ ๋ณ์๋ฅผ ์ ์ธํ๊ฒ ๋๋ฉด, ํ๋์ ๋ฐ์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๊ฐ ์๊ธฐ๋ฉฐ, ๊ทธ ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ค์ solmi๋ผ๋ ๊ฐ์ ์ ์ฅํ๋ค.
3. โ๏ธ์์name
์ ๋ณ์๊ฐ์ hello๋ก ๋ฐ๊พธ๋ฉด, solmi๋ก ์ ์ฅ๋์ด ์๋ ๊ฐ์ด hello๋ก ๋ฐ๋๊ฒ ๋๋ค.
(์ฐจ์งํ๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ๋ ๊ทธ๋๋ก)
Block Scope
{ let name = "solmi"; console.log(name); name = "hello"; console.log(name); } console.log(name);
{ }๋ก ์ฝ๋๋ฅผ ๊ฐ์ธ๋ฉด block์ด ๋๋ค.
block { } ๋ฐ์์console.log(name);
์ด๋ผ๊ณ ๋ช ๋ นํด๋, ๊ฒฐ๊ณผ๋ ์๋ฌด ๊ฐ๋ ์ถ๋ ฅ๋์ง ์๋๋ค.
block ๋ฐ์์ ์์ฑํ ๋ด์ฉ์ block ์์ ๋ด์ฉ์ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ!
Global Scope
let globalName = "global name";
block { }์ ์ฐ์ง ์๊ณ ํ์ผ ์์ ๋ฐ๋ก ์ ์ํด์ ์์ฑํ๋๊ฒ์ ๋งํ๋ค.
์ด๋ ๊ณณ์์๋ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ { }์/๋ฐ์์ ์์ฑํด๋ ๋ชจ๋ ์ถ๋ ฅ๋๋ค.
โ ๏ธ Global Scope๋ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋ ํ ๋๋ ๋๊น์ง ํญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ต์ํ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ฉฐ, class๋ ํจ์(if, for๋ฌธ)๋ฑ ์ ๋ง ํ์ํ ๊ณณ์์๋ง ์ฌ์ฉํด์ผ ํ๋ค!!
๐ฅ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ณ์๋ฅผ ์ ์ธํ๋ ํค์๋๋ let
๋ฑ ํ๋์ด๋ค!!
(let
์ด ๋์ค๊ธฐ ์ ์๋ var
๋ฅผ ์ฌ์ฉํ์์ง๋ง, ์ด์ ๋ ๋์ด์ NONO!!!!!)
๐คท๐ปโโ๏ธ ์ฅ? ์? var ์ฐ๋ฉด ๋ญ ํฐ์ผ์ด๋ผ๋ ๋๋จ~?ใ
์์ฒญ๋ ํฐ์ผ์ด ๋๋ค......
๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๋ณ์๋ฅผ ์ ์ธํ๊ณ ๋์ ๊ฐ์ ํ ๋นํ๋๊ฒ ์ผ๋ฐ์ ์ด์ง๋ง, JavaScript์var
๋ ๋ฏธ์น ํ๋์ ํ ์ ์๋ค....
๋ฐ๋ก ๋ณ์๋ฅผ ์ ์ธ ํ๊ธฐ๋ ์ ์ ๊ฐ์ ํ ๋นํ ์ ์๊ณ , ์ฌ์ง์ด ๊ฐ์ ํ ๋นํ๊ธฐ๋ ์ ์ ์ถ๋ ฅํ ์๊ฐ ์๋ค.console.log(age); age = 4; var age;
์ด๋ ๊ฒ ์์ฑํ ํ์, ์ด๊ฑธ ๋ธ๋ผ์ฐ์ ๊ฒ์ฌ(๊ฐ๋ฐ์ ๋๊ตฌ) - console์์ ํ์ธํด๋ณด๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
๋ ์ฉ~๐ณ ๋ณ์ ์ ์ธ ์ ์+๊ฐ ํ ๋นํ๊ธฐ ์ ์+์ถ๋ ฅ๋ถํฐ ๋ฐ๋ก ๋๋ ธ๋๋ฐ ์น์ ํ๊ฒ ๊ฐ์ด ์์ง ํ ๋น๋์ง ์์ ๋ณ์๋ผ๊ณ ์๋ ค์ค๋ค.....
(๋ด์ผ ๋ค์ ์ ๋ฆฌํ ๊ฑฐ์ง๋ง,undefined
๋ Error๊ฐ ์๋๋ผ ๋ณ์๋ ์ ์ธ๋์์ง๋ง ๊ฐ์ ์์ง ์ ๋ ฅ๋์ง ์์ ๊ฒฝ์ฐ๋ ๋งํ๋ค. ๊ทธ๋ฌ๋๊น ๋ณ์ ์ ์ธ๋ ์ ์ ์ถ๋ ฅ๋ถํฐ ๋๋ฆฌ๋ ๋ฏธ์น์ง์ ํ๋๋ฐ ๋๊ทธ๋ฝ๊ฒ๋ ์์ง ๊ฐ์ด ์ ๋ ฅ๋์ง ์์ ๋ณ์๋ผ๊ณ ์ณ์ค๋ค.)
(๋ง์น ์ํํ๋ ์ํ์ง์๋ง ์ ๋ต ์ฒดํฌํ๊ณ OMR์ 1๋ ๋งํน ์ํ์ฑ ๋๋๋ฐ๋ ๋์ค์ OMR์ ๋ค์ ๋งํนํ๋ผ๋ฉด์ ์ ๋ต์ผ๋ก ์ธ์ ํด์ฃผ๋ ๊ฑฐ์. ์ด...์๋๊ฐ?)
๐คท๐ปโโ๏ธ ๊ทธ๋ ๋ค๋ฉด let์ ๋ญ๊ฐ ๋ค๋ฅผ๊น?console.log(age); age = 4; let name;
let
์ ์ ์ธํ๊ธฐ๋ ์ ์ ๊ฐ์ ๋ฃ์๋ค๊ณํผ์ญ์error๋ฅผ ๋์ด๋ค!
์ด๋ ๊ฒ var
์ let
์์ ๊ฐ์ ๊ฐ์ ์
๋ ฅํ์์๋, ๋๊ตฌ๋ ์ถ๋ ฅ๋๊ณ ๋๊ตฌ๋ Error๊ฐ ๋จ๋ ์ด์ ๋ ๋ฌด์์ผ๊น?
๊ทธ๋ฆฌ๊ณ ๋ฌด์๋๋ฌธ์ var
๋ฅผ ์ฐ์ง ๋ง๋ผ๊ณ ํ๋ ๊ฑธ๊น?
โ๏ธvar hoisting ๋๋ฌธ์ global scope์ ๋ณ์/ํจ์๋ฅผ ์ ์ธํ ๊ฒฝ์ฐ ์๋ฌด๋ฆฌ ์๋์ ์ ์ธํด๋ ์ ์ผ ์๋ก ์ฌ๋ผ๊ฐ๋ฒ๋ฆฐ๋ค!
๐ณ hoisting (๋์ด์ฌ๋ ค์ฃผ๋ค) : move declaration from bottom to top
= ๋ณ์/ํจ์๋ฅผ ์ด๋์ ์ ์ธํ๋์ง์ ์๊ด์์ด, ํญ์ ์ ์ผ ์๋ก ๋ณ์/ํจ์์ ์ธ์ ๋์ด์ฌ๋ ค์ฃผ๋ ๊ฒ์ ๋งํ๋ค.
(๋ฌผ๋ฆฌ์ ์ผ๋ก ์ฝ๋๊ฐ ๋์ด์ฌ๋ ค์ง๋๊ฒ์ด ์๋๋ผ, JavaScript Parser ๋ด๋ถ์ ์ผ๋ก ๋์ด์ฌ๋ ค์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ค. hoisting์ ํ์ฉํด์ผํ๋ ๊ฒฝ์ฐ๋ ์์ง๋ง, ํต์์ ์ผ๋ก ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์๊ฐ ์์ข์์ง๋ฏ๋ก ๋๋๋ก ์ฌ์ฉํ์ง ์๋๊ฒ์ด ์ข๋ค.)
โ๏ธvar๋ block scope๋ฅผ ์ฒ ์ ํ ๋ฌด์ํ๋ค.
{ age = 8; var age; } console.log(age); //8
์ด๋ ๊ฒ
age
๋ผ๋ ๋ณ์๋ฅผ block ์์ ์ ์ธํ์์๋ ๋ถ๊ตฌํ๊ณ , block ๋ฐ์์age
๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด ์ ์์ ์ผ๋ก 8์ด๋ผ๋ ๊ฐ์ด ๋์จ๋ค.
โ ๐๐ปโโ๏ธ ์ด์ฐฝ๊ธฐ์๋ ์ด๋ฌํ ์ ์ฐ์ฑ์ ํ์ฉํ์ฌ ์ฝ๊ฒ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋๋ฑ ๋ง๋ค ์ ์์๋๋ฐ, ์ ์ ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด์ ๋์ค์๋ ์ ์ธํ์ง๋ ์์ ๊ฐ์ด ๋ฉ๋๋ก ์ถ๋ ฅ๋๋๋ฑ์ ์ฌ๋ฌ๊ฐ์ง ๋ฌธ์ ์ ์ด ์๊ฒจ๋๊ฒ ๋๋ค.
โ ์ด๋ฌํ var์ ์ํ๋ถ๋ด ๋๋ฌธ์ let์ด ๋ฑ์ฅํ๊ฒ ๋์๋ค! ๋๋ฅํ!๐ฅ
โ ๏ธ ํ.์ง.๋ง...
let์ด๋ผ๊ณ ๋ฌด์กฐ๊ฑด ๋ง๋ฅ์ธ๊ฒ์ ์๋๋คใ ใ ๊ทธ ์ด์ ๋ ๋ฐ๋ก ๋ธ๋ผ์ฐ์ ํธํ!
๋คํํ ๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ์์ ์ ์ง์๋์ง๋ง, ์ฐ๋ฆฌ ๋ชจ๋์ ๊ณ ํต์ธ IE์์๋(microsoft manghaera) ์ ์ผ ์ต์ ๋ฒ์ ์์๋ es6์ ์ง์ํ์ง ์๋๋ค.....
๊ทธ๋์ IE์๋ ๊ผญ ์๋น์คํด์ผ ํ๋ค๋ฉด!
es6 ์ด์์ผ๋ก ๊ฐ๋ฐํ ํ์, BABEL์ ์ด์ฉํ์ฌ es5๋ es4๋ก ๋ฐฐํฌํ๋๊ฒ ์ข๋ค. es5๋ ๋คํํ IE๋๋ ์ต์ ๋ฒ์ ์์๋ ์ง์๋๋ค....
๊ทธ๋ ์ง๋ง, IE๋ ์ ์ธ๊ณ์ ์ผ๋ก 1.71%์ ์ฌ๋๋ค๋ง ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ, IE ๊ฐ๊ตญ์ธ ์ฐ๋ฆฌ๋๋ผ์์๋ 7.79%๋ง ์ฌ์ฉ์ค์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๊ณ์ํด์ ์ค์ด๋ค๊ณ ์๋ค.๐คฎ (๋์ถฉ IE๋ ์ด์ ๊ทธ๋ง ๋ฌด์ํ์๋ ๋ด์ฉ)
const
๐ Constant์ read ์ฝ๊ธฐ๋ง ๊ฐ๋ฅ!
const daysInWeek = 7;
const maxNumber = 5;
Variable๋ ์ดํ๋ฆฌ์ผ์ด์ ๋ง๋ค ํ ๋น๋ ๋น ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฅดํค๋ฉฐ ํฌ์ธํฐ๋ฅผ ํตํด ๊ฐ์ ๊ณ์ ๋ฐ๊ฟ๋๊ฐ ์ ์๋ ๋ฐ๋ฉด์, Constants๋ ๊ฐ์ ์ ์ธ+ํ ๋นํ ํ์๋ ์ ๋ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค!
- Mutable Data Types : all objects by default are mutable in JS
= ๊ฐ์ด ๊ณ์ ๋ณ๊ฒฝ๋ ์ ์๋ type- Immutable Data Types : premitive types, frozen objects(
Object.freeze()
)
= ๊ฐ์ด ์ ๋ ๋ฐ๋์ง ์๋ type
Constants๋ Immutable Data Types ์ด๋ฉฐ, ํ๋ก๊ทธ๋๋ฐ ํ ๋ ์ ๋งํ๋ฉด Immutable Data Types๋ฅผ ์ฌ์ฉํ๋๊ฒ์ด ์ข๋ค.
๐๐ปโโ๏ธ Immutable Data Types์ ์ฌ์ฉํด์ผ ํ๋ ์ด์- security
ํด์ปค๋ค์ด ์ฝ๋์ ๊ฐ์ ๋ฐ๊พธ๋ ๊ฒ์ ๋ฐฉ์งํ๋ค.- thread safety
์ดํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ฉด ํ๊ฐ์ง์ ํ๋ก์ธ์ค๊ฐ ํ ๋น๋๊ณ , ๊ทธ ํ๋ก์ธ์ค ์์์ ๋ค์ํ thread๊ฐ ๋์์ ๋์๊ฐ๊ฒ ๋๋ค.
์ด๋ ์ด ๋ค์ํ thread๊ฐ ๋์์ ๋ณ์์ ์ ๊ทผํด์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๊ฒ ๋๋ ์ํ์ฑ์ด ์๊ธฐ๋๋ฐ, ์ด๊ฒ์ ๋ฐฉ์งํ๋ค.- reduce human mistakes
์์ผ๋ก ํด๋น ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ๋ ์ข์ ๋ฐฉ์์ด ์๋ค๋ฉด,const
๋ฅผ ์ด์ฉํด ์์ฑํ์ฌ ๋ณธ์ธ ํน์ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ๋ ๋ฐ์ํ ์ ์๋ ์ค์๋ฅผ ๋ฐฉ์งํด์ค๋ค.
let globalName = "global name";
camel case๋ JS๊ฐ ๊ฐ๊ณ ์๋ ๋ฌธ๋ฒ ๊ท์น์ผ๋ก, ๋ณ์๋ช
์ ํญ์ ์๋ฌธ์๋ก ์์ํ๊ณ ์ค๊ฐ์ space๊ฐ ํ์ํ๋ฉด space ๋์ ์ ๋๋ฌธ์๋ฅผ ์ฌ์ฉํ๋๊ฒ์ ๋งํ๋ค!
ex) days of week๋ผ๋ ๋ณ์๋ช
์ ์ง์ ํ๊ณ ์ถ๋ค๋ฉด -> daysOfWeek๋ก ์์ฑ! ๋ํ ๋ฑ์ฒ๋ผ ์ค๋ฅด๋ฝ ๋ด๋ฆฌ๋ฝ
๊ฐ๋ฐ ์์ด๋ณด ์ฝ๋ฆฐ์ด์
๋๋ค!
์ด ๋ด์ฉ์ ํผ์ ๋์์ ๊ฐ์&๊ตฌ๊ธ๋ง์ ํตํด ๋ฐฐ์ด ๋ด์ฉ์ ์ ๋ฆฌํ๋ ๊ฒ์ผ๋ก, ์ ๊ฐ ์ดํดํ๊ณ ๋์ด๊ฐ ๊ฐ๋
์ด ํ๋ ธ๊ฑฐ๋ ๋ ๋ณด์ถฉํ ๊ฐ๋
์ด ์๋ค๋ฉด ๋๊ธ ๋จ๊ฒจ์ฃผ์๋ฉด ์ ๋ง ๊ฐ์ฌํ๊ฒ ์ต๋๋ค!!