1. ๋ณ์ ์ ์ธ 3๊ฐ์ง ๋ฐฉ๋ฒ
1) var ( function scope, mutable )
๋๋๋ก ์ฌ์ฉํ์ง ๋ง ๊ฒ!
# ์ ์ธ๊ณผ ์ด๊ธฐํ
var i; // ์ ์ธ, "undefined"๊ฐ ์ ์ฅ๋จ
var sum = 0; // ์ ์ธ๊ณผ ์ด๊ธฐํ
# ํ ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ๋ณ์๋ฅผ ํจ๊ป ์ ์ธํ ์ ์์
var i, sum;
# ์ ์ธ๊ณผ ์ด๊ธฐํ๋ฅผ ๋์์ ํด์ค ์ ์์
var i=0, sum=10, message=”Hello”;
# ์ ์ธ๋์ง ์์ ๋ณ์๋ ์ ์ญ ๋ณ์๊ฐ ๋จ
name = "javascript";
var์ ๋ฌธ์ ์
- ๋ณ์์ ์ ์๋ฅผ ์์ชฝ์ผ๋ก ๋์ด์ฌ๋ฆฌ๊ธฐ(๋ณ์ ํธ์ด์คํ ) ๋๋ฌธ์, ๋ณ์๋ฅผ ์ ์ํ๊ธฐ ์ ์ ๊ทธ ๋ณ์๋ฅผ ์ฌ์ฉํด๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
- ๋ธ๋ก ๋จ์๋ฅผ ์ฒ ์ ํ ๋ฌด์ํ๋ ํจ์ ์ ํจ๋ฒ์๋ฅผ ๊ฐ์ง๋ค.
- var๋ก ์ ์ธํ ๋ณ์๋ ์ฌ์ ์๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ง๊ด์ ์ด์ง ์๋ค.
- ํจ์์์์ var ํค์๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ณ์์ ๊ฐ์ ํ ๋นํ๋ฉด ์ ์ญ ๋ณ์๊ฐ ๋๋ค. (๊ธ๋ก๋ฒํ ๋ณ์๋ค์ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์์ํ ๋๋ถํฐ ๋๋ ๋๊น์ง ์ธ์ ๋ ๋ฉ๋ชจ๋ฆฌ์ ํ์ฌ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ต์ํ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.) โ ์ ์ญ ๋ณ์๊ฐ ๋๋ ๊ฒ์ ํผํ๊ธฐ ์ํด ํ์ผ์ ์ต์๋จ์ 'use strict'๋ฅผ ์ ์ธํ ์ ์๋ค.
- ๋ฐ๋ณต๋ฌธ์์ ์ ์๋ ๋ณ์๊ฐ ๋ฐ๋ณต๋ฌธ์ด ๋๋ ์ดํ์๋ ๊ณ์ ๋จ์์๋ค. โ var๋ณ์๋ ํจ์ ์ค์ฝํ์ด๋ฏ๋ก ์ฆ์ ์คํ ํจ์๋ก ๋ฌถ์ผ๋ฉด ๋ณ์์ ์ค์ฝํ๋ฅผ ์ ํํ ์ ์๋ค.
<๋ณ์> 2) let ( block scope, mutable )
# ์ ์ธ๊ณผ ์ด๊ธฐํ
let i; // ์ ์ธ, "undefined"๊ฐ ์ ์ฅ๋จ
let sum = 0; // ์ ์ธ๊ณผ ์ด๊ธฐํ
# ํ ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ๋ณ์๋ฅผ ํจ๊ป ์ ์ธํ ์ ์์
let i, sum;
# ์ ์ธ๊ณผ ์ด๊ธฐํ๋ฅผ ๋์์ ํด์ค ์ ์์
let i=0, sum=10, message=”Hello”;
let์ ํน์ง
- var ์ ํจ์ ๋ ๋ฒจ ์ค์ฝํ์๋ ๋ฐ๋ฉด, let ์ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ ๋ณ์๋ฅผ ์ ์ธํ๋ค.
- let ์ผ๋ก ๋ณ์ ์ด๋ฆ์ ์ค๋ณตํ์ฌ ์ ์ธํ ์ ์์ผ๋ฉฐ SyntaxError๋ฌธ๋ฒ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
- var ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ ์ ์ญ ๊ฐ์ฒด์ ํ๋กํผํฐ๊ฐ ๋๋ค. ๊ทธ๋ฌ๋ let ์ผ๋ก ์ ์ธํ ์ ์ญ ๋ณ์๋ ์ ์ญ ๊ฐ์ฒด์ ํ๋กํผํฐ๊ฐ ๋ ์ ์๋ค.
<์์> 3) const ( block scope, immutable )
const ๋ณ์์ ํ ๋น๋ ๊ฐ์ ์ฌํ ๋นํ ์ ์์ผ๋ฉฐ ๋ค์ ์ ์ธํ ์๋ ์๊ธฐ ๋๋ฌธ์, ์ฒ์ ์ ์ธํ ๋, ๋ฐ๋์ ์ด๊ธฐํ๋ฅผ ํด์ผํ๋ค.
๋ณดํต ๊ด์ต์ ์ผ๋ก ๋๋ฌธ์๋ฅผ ์ฌ์ฉํด์ ์ ์ธํ๋ค.
const MY_NUM = 7;
immutable์ ์ฅ์
- ํ ๋ฒ ์์ฑํ ๊ฐ์ ๋ค๋ฅธ ํด์ปค๋ค์ด ์ด์ํ ์ฝ๋๋ฅผ ์ฝ์ ํด ๊ฐ์ ๊ณ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์๋ค.
- ์ฌ๋ฌ ๊ฐ์ thread๊ฐ ๋ณ์์ ๊ฐ์ ๋์์ ์ ๊ทผํ์ฌ ๋ณ๊ฒฝํ๋ ์ํ์ด ์๋ค.
- ์ฌ๋์ ์ค์๋ฅผ ์ค์ฌ์ค๋ค.
2. function scope(ํจ์ ์ ํจ ๋ฒ์) vs block scope(๋ธ๋ก ์ ํจ ๋ฒ์)
ํจ์ ์ ํจ๋ฒ์ |
ํจ์ ์ ํจ๋ฒ์๋ ์ด๋ค ํจ์ ์์์ ์ ์ธ๋ ๋ชจ๋ ๋ณ์๋ ๊ทธ ํจ์ ์ ์ฒด์ ๊ฑธ์ณ ์ ํจํ๋ค๋ ์๋ฏธ์ด๋ค. ์ด๋ ๋ณ์๊ฐ ๋ฏธ์ฒ ์ ์ธ๋๊ธฐ ์ ์๋ ์ ํจํ๋ค๋ ๋ป์ด๊ธฐ๋ ํ๋ค. => Hoisting ๋๋ค. |
๋ธ๋ก ์ ํจ ๋ฒ์ |
|
ํฌ๋กฌ ๊ฐ๋ฐ์ ๋๊ตฌ์ Sourcesํญ์์ ์ค๋จ์ ์ ์ค์ ํ๊ณ , ๋ก๋ํ๋ฉด, ์ค๋ฅธ์ชฝ ํ๋จ Scope ์ฐฝ์์ ์ ํจ๋ฒ์๋ฅผ ์์๋ณผ ์ ์๋ค.
2-1) Hoisting
ํธ์ด์คํ ์ด๋, ์ด๋์ ์ ์ธํ๋์ ์๊ด์์ด ํญ์ ์ ์ผ ์๋ก ๋์ด์ฌ๋ ค์ฃผ๋ ๊ฒ์ ๋งํ๋ค.
- var ๋ณ์ ์ ์ธ๊ณผ ํจ์์ ์ธ๋ฌธ์์๋ง ํธ์ด์คํ ์ด ์ผ์ด๋๋ค.
- var ๋ณ์/ํจ์์ ์ ์ธ๋ง ์๋ก ๋์ด ์ฌ๋ ค์ง๋ฉฐ, ํ ๋น์ ๋์ด ์ฌ๋ ค์ง์ง ์๋๋ค.
- let/const ๋ณ์ ์ ์ธ๊ณผ ํจ์ํํ์์์๋ ํธ์ด์คํ ์ด ๋ฐ์ํ์ง ์๋๋ค.
'๐ฐ ์ธ์ด > JS - ๋น๊ธฐ๋ ํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
for()๊ณผ forEach() (0) | 2021.05.24 |
---|---|
ํจ์ ํ๋กํผํฐ - call, apply/ bind (0) | 2021.05.24 |
์ค๋ธ์ ํธ ํ๋กํ ํ์ (0) | 2021.05.23 |
new ์ฐ์ฐ์ (0) | 2021.05.17 |
๋ฐ์ดํฐ ํ์ (0) | 2021.05.17 |