ํฐ์คํ ๋ฆฌ ๋ทฐ
์ด๋ฒ์ ์์๋ณผ ๋ด์ฉ์ let๊ณผ const ์
๋๋ค. ๋ณ์์ ์์ ์ ์ธ ์์ ์ฐ์ด๋ ํค์๋์ธ๋ฐ ES6 ์ด์ ์๋ var ๋ผ๋ ํค์๋ ํ๋๋ก๋ง ์ฌ์ฉํ์๋๋ฐ์, ES6์์ ๋ฑ์ฅํ let ๊ณผ const๋ ์ด๋ค์ ์์ ๋ค๋ฅธ์ง ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
โป let
: let
์ ๋ณ์๊ฐ ์ ์ธ๋ ๋ธ๋ก, ๊ตฌ๋ฌธ ๋๋ ํํ์ ๋ด์์๋ง ์ ํจํ ๋ณ์๋ฅผ ์ ์ธํ๋ค. ์ด๋ var
ํค์๋๊ฐ ๋ธ๋ก ๋ฒ์๋ฅผ ๋ฌด์ํ๊ณ ์ ์ญ ๋ณ์๋ ํจ์ ์ง์ญ ๋ณ์๋ก ์ ์ธ๋๋ ๊ฒ๊ณผ ๋ค๋ฅธ ์ ์ด๋ค.
var ํค์๋์ ๋น๊ตํด์ ์ค๋ช ์ ํ๊ฒ ๋๋๋ฐ, ๊ทธ๋ผ var ํค์๋์ ๋น๊ตํ์ ๋ ์ด๋ค ์ฐจ์ด์ ์ด ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
1. ์ค๋ณต์ ์ธ
var x = 5; var x = 7; var x = 0;
var ํค์๋๋ก๋ ์ด๋ ๊ฒ ์จ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค. ๊ทผ๋ฐ ๋ณดํต ์ด๋ ๊ฒ ๋ณ์๋ฅผ ์ ์ธํ๊ณ ์ฌ์ฉํ์ง ์์ฃ . ํ์ง๋ง let์ ์ฌ์ฉํ์ ๋์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
let x = 5; let x = 7; let x = 0; //Parsing error: Identifier 'x' has already been declared
์ด๋ฏธ ์ ์ธ ๋์์ผ๋ ์๋ฌ๋ฅผ ๋ฐ์์ํค๊ณ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์๊ฐํ์ ๋๋ ์ด๊ฒ ์ง๊ทนํ ์ ์์ธ๊ฑฐ์ฃ .
2. Hoisting
: ํธ์ด์คํ ์ JavaScript์์ ์คํ ์ฝํ ์คํธ(ํนํ ์์ฑ ๋ฐ ์คํ ๋จ๊ณ)๊ฐ ์ด๋ป๊ฒ ๋์ํ๋๊ฐ์ ๋ํ ์ผ๋ฐ์ ์ธ ์๊ฐ์ผ๋ก ์ฌ๊ฒจ์ง๋๋ค.
console.log(x); //x is not defined
๋๋ธ ์ด๋ ๊ฒ ๋ณ์ ์ ์ธ๋ ์์ด ์จ๋ฒ๋ฆฌ๋ฉด ๋ฐ๋ก ์ค๋ฅ๋ฅผ ๋ด๋ฒ๋ฆฝ๋๋ค. ๊ทธ๋ผ ์ด ๊ฒฝ์ฐ์๋ ์ด๋ป๊ฒ ๋ ๊น์?
console.log(x); //undefined var x = "hello"; console.log(x); //"hello"
๋ณด๋ค์ํผ ์๋ฌ๊ฐ ์๋ undefined ๋ฅผ ์ถ๋ ฅํ๊ฒ ๋ฉ๋๋ค. ์๋ฌ๋ undefined๋ ๊ฐ๋ค๊ณ ํ ์ ์์ฃ . ํ์ง๋ง ์ด๊ฑด ๋ถ๋ช ์ฌ์ฉ์๊ฐ ์๋ํ ๊ฐ์ ์๋๊ฒ๋๋ค. ์ฌ์ฉ์๊ฐ ์๋ํ์ง ์์๋ค๋ฉด ์ฐจ๋ผ๋ฆฌ ์คํ๋จ๊ณ์์ ์ค๋ฅ๋ฅผ ๋ด์ ์ค๋ฅ๋ฅผ ์์ ํ ์ ์๊ฒ๋ ์๋ ค์ฃผ๋๊ฒ ๋ ๋์ ๋ฐฉ๋ฒ์ผ ์๋ ์์ต๋๋ค. ๊ทธ๋์ let์ ์ฝ๋๊ฐ ์์๊ฐ์ด ์์ฑ๋๋ฉด ๋ฐ๋ก ์ค๋ฅ๋ฅผ ๋ ๋๋ค.
console.log(x); let x = "hello"; console.log(x); //ReferenceError: x is not defined
3. ๋ณ์์ ์ ํจ๋ฒ์ (Scope)
: ๋ณ์์ ์ ํจ๋ฒ์๋ ์ง์ญ๋ณ์์ ์ ์ญ๋ณ์ ์ด ๋ ๊ฐ์ง๋ก ๋๋ ์ง๋๋ค. ๋ณดํต ์ค์ฝํ๋ผ๊ณ ํ์ฃ . ๋ณ์ ์ด๋ฆ์ด ํ๋๋ถํฐ ์ด๊น์ง ๋ชจ๋ ๋ค๋ฅด๋ค๊ณ ํ๋ค๋ฉด ๋ฌธ์ ๊ฐ ๋์ง ์์ ์๋ ์๊ฒ ์ง๋ง ๋ณดํต ์ฝ๋ฉ์ ํ ๋ ๊ทธ๋ ๊ฒ ํ์ง๋ ์์ฃ . ๋ฌธ์ ๊ฐ ๋ฐ์๋๋ ์ํฉ์ ํ๋ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
var state = "๋๋ ๋ฐ๊นฅ์ ์์ด."; console.log(state); //"๋๋ ๋ฐ๊นฅ์ ์์ด." if(true) { var state = "๋๋ ์์ ์์ด."; console.log(state); //"๋๋ ์์ ์์ด." } console.log(state); //"๋๋ ์์ ์์ด."
๋งจ ๋ง์ง๋ง ์ค์์ ์์๊ณผ๋ ๋ค๋ฅธ ๋ต๋ณ์ ํฉ๋๋ค. ์๋ ๋ฐ์ ์๋ค๊ณ ๋๋ตํด์ผํ ๊ตฌ๋ฌธ์ธ๋ฐ ์์์๋ค๊ณ ๋์ค๊ณ ์์ฃ . ๊ทธ ์ด์ ๋ if๋ฌธ ์์ ์๋ state ๋ผ๋ ๋ณ์๊ฐ ๋งจ ์์ ์ ์ธ๋ state์ ๋์ผํ๊ธฐ ๋๋ฌธ์ if๋ฌธ์์ ํ ๋นํ ๋ฌธ์ฅ์ผ๋ก ๋ฎ์ด ์จ๋ฒ๋ฆฐ ๊ฒ์ด์ฃ . ์ด๊ฑธ ๋๊ฐ์ด let ํค์๋๋ก ๋ณ๊ฒฝํด๋ณด์ฃ .
let state = "๋๋ ๋ฐ๊นฅ์ ์์ด."; console.log(state); //"๋๋ ๋ฐ๊นฅ์ ์์ด." if(true) { let state = "๋๋ ์์ ์์ด."; console.log(state); //"๋๋ ์์ ์์ด." } console.log(state); //"๋๋ ๋ฐ๊นฅ์ ์์ด."
์ด๋ฒ์ ์ ๊ฐ ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋์์ต๋๋ค. ์ด์ ๋ if๋ฌธ ์์ ์๋ state์ ๋งจ ์ฒซ ์ค์ state๋ ์์ ๋ค๋ฅธ ๋ณ์์ด๊ธฐ ๋๋ฌธ์ด์ฃ . if๋ฌธ ์์ ์๋ state๋ if๋ฌธ ์ข ๋ฃ์ ํจ๊ป ์ฌ๋ผ์ง๋๋ค. ๊ทธ๋ผ ๋งจ ๋ง์ง๋ง ์ถ๋ ฅ๋ฌธ์ ๋งจ ์ฒซ ์ค์์ ํ ๋นํ ๋ฌธ์ฅ์ ์ถ๋ ฅํ๊ฒ ๋ฉ๋๋ค.
์ ๊ฐ ๊ณ์ let๊ณผ var๋ฅผ ๋น๊ตํ๊ธฐ๋ง ํ๋๋ฐ const์ ์ฐจ์ด์ ์ ๋จ์ง ๊ฐ์ ๋ฐ๊ฟ ์ ์๋ "์์" ๋ผ๋ ํน์ง๋ง ๊ฐ๊ณ ์์ ๋ฟ ๋๋จธ์ง๋ let๊ณผ ๋์ผํฉ๋๋ค. ๋ช ๊ฐ์ง ์ถ๊ฐ์ ์ผ๋ก ์ค๋ช ํ์๋ฉด const๋ฅผ ์ฌ์ฉํ ๋์ ์ฝ๋ฉ ์คํ์ผ์ ๋๋ค.
const MAX = 100; const CURRENT_STATE_TEMP = 17; MAX = 50; //ERROR!
์์๋ ์ผ๋ฐ์ ์ผ๋ก ๋๋ฌธ์์ ์ธ๋๋ฐ ๊ธฐํธ(_) ์ ์กฐํฉ์ผ๋ก ์์ฑํฉ๋๋ค. ๋ฌผ๋ก ์ด ์คํ์ผ์ ์ ์งํจ๋ค๊ณ ์ค๋ฅ๋ฅผ ๋ด์ง ์์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์์ ์๋ฌต์ ์ธ ๊ท์น์ฌํญ์ด ์๋ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด(์๋ง ๊ทธ๋ ๋ค๊ณ ์๊ณ ์์ต๋๋ค.)๊ฐ ์ด๋ฌํ ์คํ์ผ์ ์ง์ผ์ ์ฝ๋ฉํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๊ฐ ์์๋ ๋ฐ๊ฟ ์ ์๋ ๊ฐ์ด๋ผ๊ณ ํ๋๋ฐ, ๋จ ํ๊ฐ์ง์ ์์ธ๊ฐ ์กด์ฌํฉ๋๋ค.
const CAR = { "hyundai" : "avante", "kia" : "K3", "audi" : "A6" } console.log(CAR); //์์ฐ๋ ๊ฐ์ A6 CAR.audi = "A3"; console.log(CAR); //์์ฐ๋ ๊ฐ์ด A3๋ก ๋ณ๊ฒฝ๋จ.
const๋ก ๊ฐ์ฒด๋ฅผ ์ ์ธํ๋๋ฐ ์ด๋ ๊ฒ ๊ฐ์ฒด ํค ๊ฐ์ผ๋ก ์ ๊ทผ์ ํด์ ๊ฐ์ ๋ฐ๊ฟ๋ฒ๋ฆฌ๋ฉด const๋ก ์ ์ธํ์์ง๋ผ๋ ๊ฐ์ด ๋ฐ๋๋๋ค. ์ด๋ด๊ฒฝ์ฐ ๊ฐ์ด ๋ฐ๋๋๊ฑธ ๋ฐฉ์งํ๊ณ ์ถ๋ค๋ฉด Object.freeze ๋ด์ฅํจ์๋ฅผ ์ฐ๋ฉด ๋ฉ๋๋ค.
'javascript > ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
9. generators (0) | 2019.01.22 |
---|---|
8. iterators + for..of (0) | 2019.01.11 |
6. default + rest + spread (0) | 2019.01.03 |
5. destructuring (0) | 2018.12.31 |
4. template strings (0) | 2018.12.24 |
- Total
- Today
- Yesterday
- sequelize
- ๋น๋๊ธฐ ์์ฒญ
- Request_Limit_Exceeded
- DeferredResult
- node.js backend
- JavaScript
- typeorm
- ๊ธฐ์์ฒญAPI
- nestjs/cli
- node.js
- typeorm ์ฐ๊ฒฐ
- nestjs config
- NestJS
- Spring Async
- Promise error
- nestjs doc
- foreignkey
- nestjs project
- android
- nestjs module
- Spring
- nestjs typeorm
- ์๊ณ ๋ฆฌ์ฆ
- nestjs configService
- Promise bulk
- nestjs directory
- @nestjs/config
- docker mysql
- backend-framework
- ํ๋ก๊ทธ๋๋จธ์ค
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |