Data type & Variable - wooyeonhui/Yeonny GitHub Wiki
ํ๋ก๊ทธ๋๋ฐ์ ๋ณ์๋ฅผ ํตํด ๊ฐ์ ์ ์ฅํ๊ณ ์ฐธ์กฐํ๋ฉฐ ์ฐ์ฐ์๋ก ๊ฐ์ ์ฐ์ฐ, ํ๊ฐํ๊ณ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ๋ณต๋ฌธ์ ์ํ ํ๋ฆ์ ์ด๋ก ๋ฐ์ดํฐ์ ํ๋ฆ์ ์ ์ดํ๊ณ ํจ์๋ก ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ ๊ตฌ๋ฌธ์ ์งํฉ์ ๋ง๋ค๋ฉฐ ๊ฐ์ฒด, ๋ฐฐ์ด ๋ฑ์ผ๋ก ์๋ฃ๋ฅผ ๊ตฌ์กฐํํ๋ ๊ฒ์ด๋ค.
๋ณ์๋ ์์น(์ฃผ์)๋ฅผ ๊ธฐ์ตํ๋ ์ ์ฅ์์ด๋ค. ์์น๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฃผ์(address)๋ฅผ ์๋ฏธํ๋ค. ์ฆ ๋ณ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(Memory address)์ ์ ๊ทผํ๊ธฐ ์ํด ์ฌ๋์ด ์ดํดํ ์ ์๋ ์ธ์ด๋ก ์ง์ ํ ์๋ณ์(identifier)์ด๋ค.
๋ณ์(memory address์ ์ ๊ทผํ๊ธฐ ์ํ ์๋ณ์)๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํด์๋ ์ฐ์ ํ์ํ ์ ์ฅ ๋จ์(byte)๋ฅผ ์์์ผํ๋ค. ์ด๋ ๊ฐ์ ์ข ๋ฅ์ ๋ฐ๋ผ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํด ํ๋ณดํด์ผํ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ ๊ฐ์ ์ข ๋ฅ ์ฆ ๋ฐ์ดํฐ์ ์ข ๋ฅ๋ฅผ ์๋ฃํ(Data Type)์ด๋ผ ํ๋ค.
์๋ฅผ ๋ค์ด 1byte(8bit)๋ก ํํํ ์ ์๋ ๊ฐ์ ์ด์๋ 256๊ฐ(2^8), 4byte(32bit)๋ก ํํํ ์ ์๋ ๊ฐ์ ์ด์๋ 4,294,967,296ro(2^32)์ด๋ค.
C๋ Java๊ฐ์ C-fammily ์ธ์ด๋ Static Typing(์ ์ ํ์ดํ) ์ธ์ด๋ก ๋ณ์ ์ ์ธ์ ๋ณ์์ ์ ์ฅํ ๊ฐ์ ์ข ๋ฅ๋ ๋ฐ๋ผ ์ฌ์ ์ ์๋ฃํ์ ์ง์ (Type annotation)ํ์ฌ์ผ ํ๋ค. ๋ค์์ C์์ ์ ์ํ ๋ณ์๋ฅผ ์ ์ธํ๋ ์์ด๋ค.
์ ์ ์ธ์ ๋ง๋๋ฉด ์์คํ ์ ์ดํ ํ ๋น๋ ๊ฐ๊ณผ๋ ์๊ด์์ด 4byte์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด์ค๋ค.๋ฐ๋ผ์ ์๋ฃํ์ ๋ง๋ ๊ฐ์ ๋์ (ํ ๋น)ํ์ฌ์ผํ๋ค. ๋ค์์ C์์ ์ ์ํ ๋ณ์์ ๋ฌธ์์ด์ ์๋ชป ํ ๋นํ ์์ด๋ค.
JavaScript๋ ๋์ ํ์ดํ(Dynamic Typing) ์ธ์ด๋ก ๋ณ์์ Type annotation์ด ํ์์์ด ๊ฐ์ด ํ ๋น๋๋ ๊ณผ์ ์์ ์๋์ผ๋ก ์๋ฃํ์ด ๊ฒฐ์ (Type Inference)๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ ๋ณ์์ ์ฌ๋ฌ ์๋ฃํ์ ๊ฐ์ ๋์ ํ ์ ์๋ค.
JavaScript์๋ ์ด๋ ํ ์๋ฃํ์ด ์๋์ง ๊ทธ๋ฆฌ๊ณ ๋ณ์๋ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์์๋ณด๋๋ก ํ์.
- Data Type (์๋ฃํ) ์๋ฃํ(Data Type)์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๋ฌธ์์ด, ์ซ์, ๋ถ๋ฆฌ์ธ, ๊ฐ์ฒด ๋ฑ ์ฌ๋ฌ ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ์๋ณํ๋ ๋ถ๋ฅ๋ฅผ ๋งํ๋ค. ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ์ต์ ์๋ฃํ์ ํ์ ํ๋ ๊ฒ์ผ๋ก๋ถํฐ ์์๋๋ค.
- ๊ธฐ๋ณธ ์๋ฃํ(primitive data type)
-
- Boolean
-
- null
-
- undefined
-
- Number
-
- String
-
- Symbol (ECMAScript 6์์ ์ถ๊ฐ)
- ๊ฐ์ฒดํ(Object type)
-
- Object
Javascript์ ์๋ฃํ์ ํฌ๊ฒ ๊ธฐ๋ณธ ์๋ฃํ(primitive data type)๊ณผ ๊ฐ์ฒดํ(์ฐธ์กฐํ)์ผ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
Primitive Data Type(๊ธฐ๋ณธ์๋ฃํ)
- ๊ธฐ๋ณธ์๋ฃํ(Primitive data type)์ ๊ฐ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ฐ(immutable value)์ด๋ค. ๋ํ ์ด๋ค์ pass-by-value ์ด๋ค.
Boolean
- ๋ ผ๋ฆฌ์ ์ธ ์์๋ฅผ ๋ํ๋ด๋ฉฐ true์ false ๋๊ฐ์ง ๊ฐ์ ๊ฐ์ง ์ ์๋ค. ๋น์ด์๋ ๋ฌธ์์ด๊ณผ null, undefined,์ซ์0์ false๋ก ๊ฐ์ฃผ๋๋ค.
null
-
null ํ์ ์ ๋ฑ ํ ๊ฐ์ง ๊ฐ, null ์ ๊ฐ์ง ์ ์๋ค. JavaScript๋ case-sensitiveํ๋ฏ๋ก null์ Null,NULL๋ฑ๊ณผ ๋ค๋ฅด๋ค.
-
Computer science์์ null์ ์๋์ ์ผ๋ก ๊ธฐ๋ณธํ(primitives) ๋๋ objectํ ๋ณ์์ ๊ฐ์ด ์๋ค๋ ๊ฒ์ ๋ช ์ํ ๊ฒ์ด๋ค.
-
์ฃผ์ํ ๊ฒ์ ๋ฐ์ดํฐ ํ์์ ๋ํ๋ด๋ ๋ฌธ์์ด์ ๋ฐํํ๋ typeof์ฐ์ฐ์๋ก null๊ฐ์ ๊ฐ์ง ๋ณ์๋ฅผ ์ฐ์ฐํด ๋ณด๋ฉด null์ด ์๋ object๊ฐ ๋์จ๋ค.์ด๋ ์ฑ๊ณ์์ ๋ฌธ์ ์ด๋ค.
๋ฐ๋ผ์ nullํ์ ๋ณ์์ธ์ง ํ์ธํ ๋ typeof ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ์๋๊ณ ์ผ์น ์ฐ์ฐ์(===)๋ฅผ ์ฌ์ฉํ์ฌ์ผ ํ๋ค.
undefined
- ๊ฐ์ ํ ๋นํ์ง ์์ ๋ณ์๋ undefined ๊ฐ์ ๊ฐ์ง๋ค. ์ฆ, ์ ์ธ์ ๋์์ง๋ง ํ ๋น๋ ์ ์ด ์๋ ๋ณ์์ ์ ๊ทผํ๊ฑฐ๋ ์กด์ฌํ์ง ์๋ ๊ฐ์ฒด ํ๋กํผํฐ์ ์ ๊ทผํ ๊ฒฝ์ฐ ๋ฐํ๋๋ค.
Number
-
C ์ธ์ด์ ๊ฒฝ์ฐ, ์ ์ํ๊ณผ ์ค์ํ์ ์๋ถํ์ฌ int, long, float, double ๋ฑ๊ณผ ๊ฐ์ ๋ค์ํ ์ซ์ ์๋ฃํ์ด ์กด์ฌํ๋ค.ํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ๋ ํ๋์ ์ซ์ ์๋ฃํ๋ง ์กด์ฌํ๋ค.
-
ECMAScript ํ์ค์ ๋ฐ๋ฅด๋ฉด, ์ซ์ ์๋ฃํ์ ๋ฐฐ์ ๋ฐ๋ 64๋นํธ ๋ถ๋ ์์์ ํ ๋จ ํ๋๋ง ์กด์ฌํ๋ค. ์ ์๋ง์ ํํํ๊ธฐ ์ํ ํน๋ณํ ์๋ฃํ(integer type)์ ์๋ค.
์ถ๊ฐ์ ์ผ๋ก ์ธ๊ฐ์ง ์์๋ ๊ธฐํธ์ ์ธ ๊ฐ๋ค๋ ํํํ ์ ์๋ค.
- +/- Infinity
- NaN(not-a-number)
String
-
String(๋ฌธ์์ด) ํ์ ์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ด๋๋ฐ ์ฌ์ฉํ๋ค. ์ด๋ 0๊ฐ ๋๋ ๊ทธ ์ด์์ ์ ๋์ฝ๋(16๋นํธ ๋ถํธ์๋ ์ ์ ๊ฐ) ๋ฌธ์๋ค์ ์งํฉ์ด๋ค.๋ฌธ์์ด์ ์์ ๋ฐ์ดํ('') ๋๋ ํฐ ๋ฐ์ดํ("") ์์ ํ ์คํธ๋ฅผ ๋ฃ์ด ์์ฑํ๋ค.
-
C์ ๊ฐ์ ์ธ์ด์๋ ๋ค๋ฅด๊ฒ, ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฌธ์์ด์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ(immutable)ํ๋ค. ์ด๊ฒ์ ํ ๋ฒ ๋ฌธ์์ด์ด ์์ฑ๋๋ฉด, ๊ทธ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ ์ ์๋ค๋๊ฑธ ์๋ฏธํ๋ค.
-
๋ฌธ์์ด์ ๋ฐฐ์ด์ฒ๋ผ ์ธ๋ฑ์ค๋ฅผ ํตํด ์ ๊ทผํ ์ ์๋ค.str[0]='S'์ฒ๋ผ ์ด๋ฏธ ์์ฑ๋ ๋ฌธ์์ด์ ์๋ก์ด ๋ฌธ์๋ฅผ ๋์ ํ์ฌ ๋ณ๊ฒฝ์์ผ๋ ๋ณ๊ฒฝ์์ผ๋ ๋ฐ์๋์ง ์๋๋ค(์ด๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค). ํ๋ฒ ์์ฑ๋ ๋ฌธ์์ด์ read only๋ก์ ์์ ์ ๋ถ๊ฐํ๋ค. ์ด๊ฒ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ(immutable)์ด๋ผ ํ๋ค.
-
๊ทธ๋ฌ๋ ์๋ก์ด ๋ฌธ์์ด์ ํ ๋นํ๋ ๊ฒ์ ๋ฌผ๋ก ๊ฐ๋ฅํ๋ค. ์ด๋ ๊ธฐ์กด ๋ฌธ์์ด์ ์์ ํ๋ ๊ฒ์ด ์๋ ์๋ก์ด ๋ฌธ์์ด์ ํ ๋นํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
Symbol
- Symbol์ ES6์์ ์๋กญ๊ฒ ์ถ๊ฐ๋ 7๋ฒ์จฐ ํ์ ์ด๋ค. Symbol์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์์ ์ ์ผํ๋ฉฐ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ(immutable) ๊ธฐ๋ณธ ์๋ฃํ(primitive)์ด๋ค. ์ฃผ๋ก ๊ฐ์ฒด์ ํ๋กํผํฐ ํค(property key)๋ก ์ฌ์ฉํ๋ค. Symbol ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์์ ์ ์ผํ๊ธฐ ๋๋ฌธ์ Symbol ๊ฐ์ ํค๋ก ๊ฐ๋ ํ๋กํผํฐ๋ ๋ค๋ฅธ ์ด๋ ํ ํ๋กํผํฐ์๋ ์ถฉ๋ํ์ง ์๋๋ค.
๊ฐ์ฒดํ (Object type,์ฐธ์กฐํ) ๊ฐ์ฒด๋ ๋ฐ์ดํฐ์ ๊ทธ ๋ฐ์ดํฐ์ ๊ด๋ จ๋๋ ๋์(์ ์ฐจ,๋ฐฉ๋ฒ,๊ธฐ๋ฅ)์ ๋ชจ๋ ํฌํจํ ์ ์๋ ๊ฐ๋ ์ ์กด์ฌ์ด๋ค. ๋ฌ๋ฆฌ ๋งํด, ์ด๋ฆ๊ณผ ๊ฐ์ ๊ฐ์ง๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ ํ๋กํผํฐ(property)์ ๋์์ ์๋ฏธํ๋ ๋ฉ์๋(method)๋ฅผ ํฌํจํ๊ณ ์๋ ๋ ๋ฆฝ์ ์ฃผ์ฒด์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฐ์ฒด(object)๊ธฐ๋ฐ์ ์คํฌ๋ฆฝํธ ์ธ์ด์ด๋ฉฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด๋ฃจ๊ณ ์๋ ๊ฑฐ์"๋ชจ๋ ๊ฒ"์ ๊ฐ์ฒด์ด๋ค. ๊ธฐ๋ณธ์๋ฃํ(Primitives)์ ์ ์ธํ ๋๋จธ์ง ๊ฐ๋ค(๋ฐฐ์ด, ํจ์, ์ ๊ทํํ์ ๋ฑ)์ ๋ชจ๋ ๊ฐ์ฒด์ด๋ค.
- ํจ์ (Function)
- ๋ฐฐ์ด (Array)
- ๋ ์ง (Date)
- ์ ๊ท์ (RegExp)
์ด๊ฒ๋ค์ ๋ชจ๋ ๊ฐ์ฒด์ด๋ค. ๋ํ ๊ฐ์ฒด๋ pass-by-reference์ด๋ค.
๋ณ์ (Variable) ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ฐ(value)์ ์ ์งํ ํ์๊ฐ ์์ ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ค. ๋ณ์๋ ๊ฐ์ ์ ์ฅ, ์กฐํ, ์กฐ์(๋ณ๊ฒฝ)ํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ๋ณ์์ ์กด์ฌ ๋ชฉ์ ์ ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ์๋ฏธ๋ง๋ ์ด๋ฆ์ ์ง์ ํ์ฌ์ผํ๋ค.
๋ณ์๋ช ์ identifier(์๋ณ์)๋ก ๋ถ๋ฆฌ๊ธฐ๋ ํ๋ฉฐ ๋ช ๋ช ๊ท์น์ด ์กด์ฌํ๋ค.
- ๋ฐ๋์ ์๋ฌธ์(ํน์๋ฌธ์ ์ ์ธ), underscore( _ ),๋๋ ๋ฌ๋ฌ ๊ธฐํธ($)๋ก ์์ํ์ฌ์ผ ํ๋ค. ์ด์ด์ง๋ ๋ฌธ์์๋ ์ซ์(0~9)๋ ์ฌ์ฉํ ์ ์๋ค.
- JavaScript๋ ๋/์๋ฌธ์๋ฅผ ๊ตฌ๋ณํ๋ฏ๋ก ์ฌ์ฉํ ์ ์๋ ๋ฌธ์๋ "A"
"Z"(๋๋ฌธ์)์ "a""z"(์๋ฌธ์)์ด๋ค. ๋ณ์๋ฅผ ์ ์ธํ ๋ var keyword๊ฐ ์ฌ์ฉ๋๋ค. ๋ฑํธ(=,equal sign)๋ ๋ณ์์ ๊ฐ์ ํ ๋นํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
๊ฐ์ ํ ๋นํ์ง ์์ ๋ณ์ ์ฆ ์ ์ธ๋ง ๋์ด ์๋ ๋ณ์๋ undefined๋ก ์ด๊ธฐ๊ฐ์ ๊ฐ๊ฒ ๋๋ค. ๋ฏธ์ ์ธ ๋ณ์์ ์ ๊ทผํ๋ฉด ReferenceError์์ธ๊ฐ ๋ฐ์ํ๋ค.
๋ณ์์ ์ค๋ณต ์ ์ธ -๋ณ์์ ์ค๋ณต ์ ์ธ์ด ๊ฐ๋ฅํ๋ค.
๋ณ์ ์ ์ธ ์ var ํค์๋ ์๋ต ํ์ฉ
- ๋ณ์ ์ ์ธ์ var ํค์๋๋ฅผ ์๋ตํ ์ ์๋ค.
๋์ ํ์ดํ(Dynamic Typing) -JavaScript๋ ๋์ ํ์ (dynamic typed)์ธ์ด ํน์ ๋์จํ ํ์ (loosely typed)์ธ์ด์ด๋ค. ์ด๊ฒ์ ๋ณ์์ Type annotation์ด ํ์์์ด ๊ฐ์ด ํ ๋น๋๋ ๊ณผ์ ์์ ์๋์ผ๋ก ์๋ฃํ์ด ๊ฒฐ์ (Type Inference)๋ ๊ฒ์ด๋ผ๋ ๋ป์ด๋ค. ๋ฐ๋ผ์ ๊ฐ์ ๋ณ์์ ์ฌ๋ฌ data type์ ๊ฐ์ ๋์ ํ ์ ์๋ค. ์ด๋ฅผ ๋์ ํ์ดํ(Dynamic Typing)์ด๋ผ ํ๋ค.
๋ณ์ ํธ์ด์คํ (Variable Hoisting) var ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํ ๋ณ์๋ ์ค๋ณต ์ ์ธ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์์ ์ฝ๋๋ ๋ฌธ๋ฒ์ ์ผ๋ก ๋ฌธ์ ๊ฐ ์๋ค. โ ์์ ๋ณ์ foo๋ ์์ง ์ ์ธ๋์ง ์์์ผ๋ฏ๋ก ReferenceError:foo is not defined๊ฐ ๋ฐ์ํ ๊ฒ์ ๊ธฐ๋ํ๊ฒ ์ง๋ง ์ฝ์์๋ undefined๊ฐ ์ถ๋ ฅ๋๋ค. ์ด๊ฒ์ ๋ค๋ฅธ C-family ์ธ์ด์๋ ์ฐจ๋ณ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํน์ง์ผ๋ก ๋ชจ๋ ์ ์ธ๋ฌธ์ ํธ์ด์คํ (Hoisting)๋๊ธฐ ๋๋ฌธ์ด๋ค. ํธ์ด์คํ ์ด๋ var ์ ์ธ๋ฌธ์ด๋ function ์ ์ธ๋ฌธ์ ํด๋น Scope์ ์ ๋๋ก ์ฎ๊ธฐ๋ ๊ฒ์ ๋งํ๋ค. ์ฆ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ ์ var ์ ์ธ๋ฌธ๊ณผ function์ ์ธ๋ฌธ์ ํด๋น ์ค์ฝํ์ ๋งจ์๋ก ์ฎ๊ธด๋ค. ๋ณ์๊ฐ ์ด๋ป๊ฒ ์์ฑ๋๋ฉฐ ํธ์ด์คํ ์ ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๋ ์ง ์ข๋ ์์ธํ ์ดํด๋ณด์. ๋ณ์๋ 3๋จ๊ณ์ ๊ฑธ์ณ ์์ฑ๋๋ค. ์์ธํ ๋ด์ฉ์ Execution Context์ ์ฐธ์กฐํ๊ธฐ ๋ฐ๋๋ค.
-
์ ์ธ๋จ๊ณ(Declaration phase) ๋ณ์ ๊ฐ์ฒด(Variable Object)์ ๋ณ์๋ฅผ ๋ฑ๋กํ๋ค. ์ด๋ณ์ ๊ฐ์ฒด๋
-
์ด๊ธฐํ ๋จ๊ณ(Initialization phase) ๋ณ์ ๊ฐ์ฒด(variable Object)์ ๋ฑ๋ก๋ ๋ณ์๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ๋ค. ์ด ๋จ๊ณ์์ ๋ณ์๋ undefined๋ก ์ด๊ธฐํ๋๋ค.
-
ํ ๋น ๋จ๊ณ(Assignment phase) undefined๋ก ์ด๊ธฐํ๋ ๋ณ์์ ์ค์ ๊ฐ์ ํ ๋นํ๋ค.
javascript์ ๋ณ์๋ ๋ค๋ฅธ C-family์๋ ๋ฌ๋ฆฌ block-level scope๋ฅผ ๊ฐ์ง์ง ์๊ณ function-level scope๋ฅผ ๊ฐ๋๋ค. ๋จ, ECMAScript 6์์ ๋์ ๋ let,const ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด block-level scope๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์์ธํ ๋ด์ฉ์ Scope๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋ฐ๋๋ค.
-
Function-level scope ํจ์๋ด์์ ์ ์ธ๋ ๋ณ์๋ ํจ์ ๋ด์์๋ง ์ ํจํ๋ฉฐ ํจ์ ์ธ๋ถ์์๋ ์ฐธ์กฐํ ์ ์๋ค. ์ฆ, ํจ์ ๋ด๋ถ์์ ์ ์ธํ ๋ณ์๋ ์ง์ญ ๋ณ์์ด๋ฉฐ ํจ์ ์ธ๋ถ์์ ์ ์ธํ ๋ณ์๋ ๋ชจ๋ ์ ์ญ ๋ณ์์ด๋ค.
-
Block-level scope ์ฝ๋ ๋ธ๋ญ ๋ด์์ ์ ์ธ๋ ๋ณ์๋ ์ฝ๋ ๋ธ๋ญ ๋ด์์๋ง ์ ํจํ๋ฉฐ ์ฝ๋ ๋ธ๋ญ ์ธ๋ถ์์๋ ์ฐธ์กฐํ ์ ์๋ค.
var ํค์๋๋ก ์ ์ธ๋ ๋ณ์์ ๋ฌธ์ ์
ES5์์ ๋ณ์๋ฅผ ์ ์ธํ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ var ํค์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. var ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ ์๋์ ๊ฐ์ ํน์ง์ ๊ฐ๋๋ค. ์ด๋ ๋ค๋ฅธ C-family์ธ์ด์๋ ์ฐจ๋ณ๋๋ ํน์ง(์ค๊ณ์ ์ค๋ฅ)์ผ๋ก ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ง ์์ผ๋ฉด ์ฌ๊ฐํ ๋ฌธ์ ๋ฅผ ๋ฐ์์ํจ๋ค.
- Function-level scope
- ์ ์ญ ๋ณ์์ ๋จ๋ฐ
- for loop ์ด๊ธฐํ์์์ ์ฌ์ฉํ ๋ณ์๋ฅผ for loop ์ธ๋ถ ๋๋ ์ ์ญ์์ ์ฐธ์กฐํ ์ ์๋ค.
- var ํค์๋ ์๋ต ํ์ฉ
- ์๋ํ์ง ์์ ๋ณ์์ ์ ์ญํ
- ์ค๋ณต ์ ์ธ ํ์ฉ
- ์๋ํ์ง ์์ ๋ณ์๊ฐ ๋ณ๊ฒฝ
- ๋ณ์ ํธ์ด์คํ
- ๋ณ์๋ฅผ ์ ์ธํ๊ธฐ ์ ์ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ๋ค.
๋๋ถ๋ถ์ ๋ฌธ์ ๋ ์ ์ญ๋ณ์๋ก ์ธํด ๋ฐ์ํ๋ค. ์ ์ญ ๋ณ์๋ ๊ฐ๋จํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, ์ฌ์ฉ์ด ํธ๋ฆฌํ ๋ฉด์ด ์์ง๋ง ๋ถ๊ฐํผํ ์ํฉ์ ์ ์ธํ๊ณ ์ฌ์ฉ์ ์ต์ ํด์ผ ํ๋ค. ์ ์ญ ๋ณ์๋ ๋ฒ์(scope)๊ฐ ๋์ด์ ์ด๋์์ ์ด๋ป๊ฒ ์ฌ์ฉ๋ ์ง ํ์ ํ๊ธฐ ํ๋ค๋ค. ์ด๋ ์๋์น ์์ ๋ณ์์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ด ์ฆ๊ฐํ๋ค. ๋ํ ์ฌ๋ฌํจ์์ ์ํธ ์์กดํ๋ ๋ฑ side effect๊ฐ ์์ ์ ์์ด์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํ๋ค.
๋ณ์์ ๋ฒ์(scope)๋ ์ข์์๋ก ์ข๋ค.
ES6๋ ์ด๋ฌํ var์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด let๊ณผ const ํค์๋๋ฅผ ๋์ ํ์๋ค.