์คํ ์ปจํ
์คํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋์ ์๋ฆฌ๋ฅผ ๋ด๊ณ ์๋ ํต์ฌ ๊ฐ๋
์ด๋ค.
์คํ ์ปจํ
์คํธ๋ฅผ ๋ฐ๋ฅด๊ฒ ์ดํดํ๋ฉด ์ด๋ฐ ๊ฒ๋ค์ ์ ์ ์๋ค.
4๊ฐ์ง ํ์ ์ ์์ค์ฝ๋๋ ์คํ ์ปจํ ์คํธ๋ฅผ ์์ฑํ๋ค.
1. ์ ์ญ ์ฝ๋
์ ์ญ ์ฝ๋๋ ์ ์ญ ๋ณ์๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ต์์ ์ค์ฝํ์ธ ์ ์ญ ์ค์ฝํ๋ฅผ ์์ฑํด์ผ ํ๋ค. ์ ์ญ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋์ด์ผ ํ๋ค.
2. ํจ์ ์ฝ๋
ํจ์ ์ฝ๋๋ ์ง์ญ ์ค์ฝํ๋ฅผ ์์ฑํ๊ณ ์ง์ญ ๋ณ์, ๋งค๊ฐ๋ณ์, arguments ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํด์ผ ํ๋ค.
3. eval ์ฝ๋
eval ์ฝ๋๋ strict mode์์ ์์ ๋ง์ ๋
์์ ์ธ ์ค์ฝํ๋ฅผ ์์ ํ๋ค.
4. ๋ชจ๋ ์ฝ๋
๋ชจ๋ ์ฝ๋๋ ๋ชจ๋๋ณ๋ก ๋
๋ฆฝ์ ์ธ ๋ชจ๋ ์ค์ฝํ๋ฅผ ์์ ํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์์ค์ฝ๋๋ฅผ 2๊ฐ์ ๊ณผ์ ์ผ๋ก ๋๋์ด ์ฒ๋ฆฌํ๋ค.
์์ค์ฝ๋์ ํ๊ฐ
์์ค์ฝ๋์ ์คํ
// ์ ์ญ ๋ณ์ ์ ์ธ
const x = 1;
const y = 2;
// ํจ์ ์ ์
function foo(a) {
// ์ง์ญ ๋ณ์ ์ ์ธ
const x = 10;
const y = 20;
// ๋ฉ์๋ ํธ์ถ
console.log(a + x+ y); // 130
}
// ํจ์ ํธ์ถ
foo(100);
// ๋ฉ์๋ ํธ์ถ
console.log(x+y) // 3
1. ์ ์ญ ์ฝ๋ ํ๊ฐ
2. ์ ์ญ ์ฝ๋ ์คํ
3. ํจ์ ์ฝ๋ ํ๊ฐ
4. ํจ์ ์ฝ๋ ์คํ
์ฝ๋๊ฐ ์คํ๋๋ ค๋ฉด ์ค์ฝํ,์๋ณ์,์ฝ๋ ์คํ ์์ ๋ฑ์ ๊ด๋ฆฌ๊ฐ ํ์ํ๋ค.
์คํ ์ปจํ
์คํธ๋ ์์ค์ฝ๋๋ฅผ ์คํํ๋ ๋ฐ ํ์ํ ํ๊ฒฝ์ ์ ๊ณตํ๊ณ ์ฝ๋์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ค์ ๋ก ๊ด๋ฆฌํ๋ ์์ญ์ด๋ค
์คํ ์ปจํ
์คํธ๋ ์๋ณ์(๋ณ์, ํจ์, ํด๋์ค ๋ฑ์ ์ด๋ฆ)์ ๋ฑ๋กํ๊ณ ๊ด๋ฆฌํ๋ ์ค์ฝํ์ ์ฝ๋ ์คํ ์์ ๊ด๋ฆฌ๋ฅผ ๊ตฌํํ ๋ด๋ถ ๋ฉ์ปค๋์ฆ์ผ๋ก, ๋ชจ๋ ์ฝ๋๋ ์คํ ์ปจํ
์คํธ๋ฅผ ํตํด ์คํ๋๊ณ ๊ด๋ฆฌ๋๋ค.
const x = 1;
function foo () {
const y = 2;
function bar() {
const z = 3;
console.log(x+ +y + z);
}
bar();
}
foo() ; 8
์คํ ์ปจํ ์คํธ ์คํ ์ ์ฝ๋์ ์คํ ์์๋ฅผ ๊ด๋ฆฌํ๋ค. ์คํ ์ปจํ ์คํธ ์คํ์ ์ต์์์ ์กด์ฌํ๋ ์คํ ์ปจํ ์คํธ๋ ์ธ์ ๋ ํ์ฌ ์คํ ์ค์ธ ์ฝ๋์ ์คํ ์ปจํ ์คํธ๋ค.
๋ ์์ปฌ ํ๊ฒฝ์ ์๋ณ์์ ์๋ณ์์ ๋ฐ์ธ๋ฉ๋ ๊ฐ, ๊ทธ๋ฆฌ๊ณ ์์ ์ค์ฝํ์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ธฐ๋กํ๋ ์๋ฃ๊ตฌ์กฐ๋ก ์คํ ์ปจํ ์คํธ๋ฅผ ๊ตฌ์ฑํ๋ ์ปดํฌ๋ํธ๋ค.
๋ ์์ปฌ ํ๊ฒฝ์ ์ค์ฝํ์ ์๋ณ์๋ฅผ ๊ด๋ฆฌ.
๋ ์์ปฌ ํ๊ฒฝ์ ๋๊ฐ์ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ
ํ๊ฒฝ ๋ ์ฝ๋
์ค์ฝํ์ ํฌํจ๋ ์๋ณ์๋ฅผ ๋ฑ๋กํ๊ณ ๋ฑ๋ก๋ ์๋ณ์์ ๋ฐ์ธ๋ฉ๋ ๊ฐ์ ๊ด๋ฆฌํ๋ ์ ์ฅ์๋ค.
์ธ๋ถ ๋ ์์ปฌ ํ๊ฒฝ์ ๋ํ ์ฐธ์กฐ
var x = 1;
const y = 2;
function foo (a) {
var x = 3;
const y = 4;
function bar (b) {
const z = 5;
console.log(a + b + x + y + z);
}
bar(10);
}
foo(20) // 42
- ์ ์ญ ์คํ ์ปจํ ์คํธ ์์ฑ
- ์ ์ญ ๋ ์์ปฌ ํ๊ฒฝ ์์ฑ
- 2.1 ์ ์ญ ํ๊ฒฝ ๋ ์ฝ๋ ์์ฑ
- 2.1.1 ๊ฐ์ฒด ํ๊ฒฝ ๋ ์ฝ๋ ์์ฑ
- 2.1.2 ์ ์ธ์ ํ๊ฒฝ ๋ ์ฝ๋ ์์ฑ
- 2.2 this ๋ฐ์ธ๋ฉ
- ์ธ๋ถ ๋ ์์ปฌ ํ๊ฒฝ์ ๋ํ ์ฐธ์กฐ ๊ฒฐ์
๋น์ด์๋ ์ ์ญ ์คํ ์ปจํ ์คํธ๋ฅผ ์์ฑํ์ฌ ์คํ ์ปจํ ์คํธ ์คํ์ ํธ์ํ๋ค. ์ ์ญ ์คํ ์ปจํ ์คํธ๋ ์คํ ์ปจํ ์คํธ ์คํ์ ์ต์์, ์คํ ์ปจํ ์คํธ๊ฐ ๋๋ค.
์ ์ญ ๋ ์์ปฌ ํ๊ฒฝ์ ์์ฑํ๊ณ ์ ์ญ ์คํ ์ปจํ ์คํธ์ ๋ฐ์ธ๋ฉํ๋ค.
2.1 ์ ์ญ ํ๊ฒฝ ๋ ์ฝ๋ ์์ฑ
์ ์ญ ํ๊ฒฝ ๋ ์ฝ๋๋ ์ ์ญ ๋ณ์๋ฅผ ๊ด๋ฆฌํ๋ ์ ์ญ ์ค์ฝํ, ์ ์ญ ๊ฐ์ฒด์ ๋นํธ์ธ ์ ์ญ ํ๋กํผํฐ์ ๋นํธ์ธ ์ ์ญ ํจ์, ํ์ค ๋นํธ์ธ์ ์ ๊ณตํ๋ค
๊ธฐ์กด์ var ํค์๋๋ก ์ ์ธํ ์ ์ญ ๋ณ์์ ES6์ let, const ํค์๋๋ก ์ ์ธํ ์ ์ญ ๋ณ์๋ฅผ ๊ตฌ๋ถํ์ฌ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ ์ญ ์ค์ฝํ ์ญํ ์ ํ๋ ์ ์ญ ํ๊ฒฝ ๋ ์ฝ๋๋ ๊ฐ์ฒด ํ๊ฒฝ ๋ ์ฝ๋์ ์ ์ธ์ ํ๊ฒฝ ๋ ์ฝ๋๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
์ผ๋ฐ ์ ์ผ๋ก ์ ์ญ ์ฝ๋์์๋ this๋ ์ ์ญ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ฏ๋ก ์ ์ญ ํ๊ฒฝ ๋ ์ฝ๋์ [[GlobalThisValue]] ๋ด๋ถ ์ฌ๋กฏ์๋ ์ ์ญ ๊ฐ์ฒด๊ฐ ๋ฐ์ธ๋ฉ๋๋ค
ํ์ฌ ํ๊ฐ ์ค์ธ ์์ค์ฝ๋๋ฅผ ํฌํจํ๋ ์ธ๋ถ ์์ค์ฝ๋์ ๋ ์์ปฌ ํ๊ฒฝ, ์์ ์ค์ฝํ๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ๋จ๋ฐฉํฅ ๋งํฌ๋ ๋ฆฌ์คํธ์ธ ์ค์ฝํ ์ฒด์ธ์ ๊ตฌํ
- ํจ์ ์คํ ์ปจํ ์คํธ ์คํ
- ํจ์ ๋ ์์ปฌ ํ๊ฒฝ ์์ฑ
- ํจ์ ํ๊ฒฝ ๋ ์ฝ๋ ์์ฑ
- this๋ฐ์ธ๋ฉ
- ์ธ๋ถ ๋ ์์ปฌ ํ๊ฒฝ์ ๋ํ ์ฐธ์กฐ ๊ฒฐ์
ํจ์ ์คํ ์ปจํ
์คํธ ์คํ
ํจ์ ์คํ ์ปจํ
์คํธ๋ฅผ ์์ฑ
ํจ์ ๋ ์์ปฌ ํ๊ฒฝ ์์ฑ
ํจ์ ์คํ ์ปจํ
์คํธ์ ๋ฐ์ธ๋ฉํ๋ค.
์๋ณ์ ๊ฒฐ์ ์ ์ํด ์คํ ์ค์ธ ์คํ ์ปจํ ์คํธ์ ๋ ์์ปฌ ํ๊ฒฝ์์ ์๋ณ์๋ฅผ ๊ฒ์ํ๊ธฐ ์์ํ๋ค.
๋ฐํ์์ด ์์๋์ด bar ํจ์์ ์์ค์ฝ๋๊ฐ ์์ฐจ์ ์ผ๋ก ์คํ ๋งค๊ฐ๋ณ์์ ์ธ์๊ฐ ํ ๋น๋๊ณ , ๋ณ์ ํ ๋น๋ฌธ์ด ์คํ๋์ด ์ง์ญ ๋ณ์ z์ ๊ฐ์ด ํ ๋น
console.log ๋ฉ์๋๊ฐ ํธ์ถ๋๊ณ ์ข ๋ฃํ๋ฉด ๋๋ ์คํํ ์ฝ๋๊ฐ ์์ผ๋ฏ๋ก bar ํจ์ ์ฝ๋์ ์คํ์ด ์ข ๋ฃ๋๋ค.
bar ํจ์๊ฐ ์ข ๋ฃํ๋ฉด ๋ ์ด์ ์คํํญ ์ฝ๋๊ฐ ์์ผ๋ฏ๋ก foo ํจ์ ์ฝ๋์ ์คํ์ด ์ข ๋ฃ