์คํ ์ปจํ
์คํธ๊ฐ ์์ฑ๋๋ ๊ณผ์ ์ ์์๋ณธ๋ค. [[Scopes]] ํ๋กํผํฐ, ๋ณ์ ํธ์ด์คํ
, ํจ์ ํธ์ด์คํ
์ ๋ํด ์์๋ณธ๋ค.
์๋์ ์ฝ๋๋ก ์ด๋ป๊ฒ ์คํ ์ปจํ ์คํธ๊ฐ ์์ฑ๋๋์ง ์์๋ณด์.
var x = 'xxx';
function foo () {
var y = 'yyy';
function bar () {
var z = 'zzz';
console.log(x + y + z);
}
bar();
}
foo();- ์ปจํธ๋กค์ด ์คํ ์ปจํ ์คํธ์ ์ง์ ํ๊ธฐ ์ ์ ์ ์ญ๊ฐ์ฒด(Global Object/GO)๊ฐ ์์ฑ๋๋ค.
- ์ ์ญ๊ฐ์ฒด๋ ์ ์ผํ๋ฉฐ, ๊ฐ์ฒด์ ํ๋กํผํฐ๋ ์ฝ๋์์ ์ ๊ทผํ ์ ์๋ค.
- ์ด๊ธฐ ์ํ์๋ ๋นํธ์ธ ๊ฐ์ฒด์ธ Math, String, Array ๋ฑ๊ณผ BOM, DOM์ด ์ค์ ๋์ด ์๋ค.
- ์ ์ญ ์ฝ๋๋ก ์ปจํธ๋กค์ด ์ง์
ํ๋ฉด, ์ ์ญ ์คํ ์ปจํ
์คํธ๊ฐ ์์ฑ๋๊ณ , ์คํ ์ปจํ
์คํธ ์คํ์ ์์ธ๋ค.
์คํ ์ปจํ ์คํธ์๋ ์ค์ฝํ ์ฒด์ธ, ๋ณ์ ๊ฐ์ฒด, this value๊ฐ ์๋ค. ์ด ์คํ ์ปจํ ์คํธ๋ฅผ ๋ฐํ์ผ๋ก ๋ค์์ ์ฒ๋ฆฌ๊ฐ ์์๋๋ก ์คํ๋๋ค. (1 -> 2 -> 3)
- ์ค์ฝํ์ฒด์ธ ์์ฑ๊ณผ ์ด๊ธฐํ
- ๋ณ์ ๊ฐ์ฒดํ ์คํ
- this value ๊ฒฐ์
์ค์ฝํ ์ฒด์ธ์ ์คํ ์ปจํ
์คํธ๊ฐ ์ฐธ์กฐํ ์ ์๋ ๋ณ์ ๊ฐ์ฒด ์ฐธ์กฐ์ ๋ฆฌ์คํธ์ด๋ค. ์คํ ์ปจํ
์คํธ๊ฐ ์์ฑ๋ ํ, ๊ฐ์ฅ ๋จผ์ ์ค์ฝํ์ฒด์ธ์ ์์ฑ๊ณผ ์ด๊ธฐํ๊ฐ ์คํ๋๋ค. ์ ์ญ ์ปจํ
์คํธ์ ์ค์ฝํ ์ฒด์ธ์ ์ ์ญ ๊ฐ์ฒด(GO)์ ๋ ํผ๋ฐ์ค๋ฅผ ๋ด๊ณ ์๋ ๋ฆฌ์คํธ๊ฐ ๋๋ค.
- ๋ณ์ ๊ฐ์ฒดํ๋ ๋ณ์ ๊ฐ์ฒด(VO)์ ํ๋กํผํฐ์ ๊ฐ์ ์ถ๊ฐํ๋ ๊ฒ์ด๋ค.
- ์ ์ญ ์ฝ๋์ VO๋ ์ ์ญ ๊ฐ์ฒด Global Object(GO)๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
- ๋งค๊ฐ๋ณ์์ ์ธ์ ์ ๋ณด, ํจ์ ์ ์ธ, ๋ณ์๋ฅผ VO์ ์ถ๊ฐํ์ฌ ๊ฐ์ฒดํํ๋ค.
-
๋ณ์ ๊ฐ์ฒดํ ์์
-
๋งค๊ฐ ๋ณ์์ ์ธ์ ์ ๋ณด ์ถ๊ฐ
ํจ์ ์ฝ๋์ ๊ฒฝ์ฐ, VO์ ํ๋กํผํฐ๋ก ๋งค๊ฐ๋ณ์(parameter), ๊ฐ์ผ๋ก argument๊ฐ ์ค์ ๋๋ค.
์ ์ญ ์ฝ๋์ ๊ฒฝ์ฐ, ๋งค๊ฐ๋ณ์๊ฐ ์์ผ๋ฏ๋ก ์ด ๊ณผ์ ์ ์คํ๋์ง ์๋๋ค.
-
ํจ์ ํธ์ด์คํ
์ฝ๋ ๋ด์ ํจ์ ์ ์ธ(ํจ์ ํํ์ ์ ์ธ)์ ๋์์ผ๋ก VO์ ํ๋กํผํฐ๋ก ํจ์๋ช , ๊ทธ ๊ฐ์ผ๋ก ์์ฑ๋ ํจ์ ๊ฐ์ฒด ๊ฐ ์ค์ ๋๋ค.
-
๋ณ์ ํธ์ด์คํ
์ฝ๋ ๋ด์ ๋ณ์ ์ ์ธ์ ๋์์ผ๋ก VO์ ํ๋กํผํฐ๋ก ๋ณ์๋ช , ๊ฐ์ผ๋ก undefined๊ฐ ์ค์ ๋๋ค.
-
์ ์ญ์ฝ๋์ด๋ฏ๋ก, 1์ ์คํ๋์ง ์๊ณ , ์ ์ญ ํจ์์ธ foo ์ ์ธ์ด ์ฒ๋ฆฌ๋๊ณ , ๊ทธ ํ ์ ์ญ ๋ณ์์ธ x์ ์ ์ธ์ด ์ฒ๋ฆฌ๋๋ค.
-
foo ํจ์ ์์ฑ์ผ๋ก VO์ ํ๋กํผํฐ๋ก ํจ์ ์ด๋ฆ์ธ foo๊ฐ, ๊ฐ์ผ๋ก ํจ์ ๊ฐ์ฒด๊ฐ ์ค์ ๋๋ค.
-
์ด ๋, foo ํจ์์
[[Scopes]]๋ ๋ค์๊ณผ ๊ฐ๋ค.foo.[[Scopes]] = [ globalContext.VO ]
-
ํจ์ ๊ฐ์ฒด์
[[Scopes]]ํ๋กํผํฐ- ํจ์ ๊ฐ์ฒด๋ ๋ด๋ถ ํ๋กํผํฐ์ธ
[[Scopes]]ํ๋กํผํฐ๋ฅผ ๊ฐ๊ณ ์๋ค. - ํ์ฌ ์คํ ์ปจํ ์คํธ์ ์ค์ฝํ ์ฒด์ธ์ด ์ฐธ์กฐํ๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
[[Scopes]]ํ๋กํผํฐ๋ ์์ ์ ์คํ ํ๊ฒฝ Lexical Environment์ ์์ ์ ํฌํจํ๋ ์ธ๋ถ ํจ์์ ์คํ ํ๊ฒฝ์ธ AO์ ์ ์ญ ๊ฐ์ฒด(Global Object)๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.- ์ด ๋, ์ธ๋ถ ํจ์์ ์คํ ์ปจํ
์คํธ๊ฐ ์๋ฉธํ์ฌ๋
[[Scopes]]๋ ์ธ๋ถ ํจ์์ ์คํ ํ๊ฒฝ์ ์ฌ์ ํ ์ฐธ์กฐํ ์ ์๋ค. ์ด๋ฅผ ํด๋ก์ ๋ผ๊ณ ํ๋ค.
- ํจ์ ๊ฐ์ฒด๋ ๋ด๋ถ ํ๋กํผํฐ์ธ
-
ํจ์ ํธ์ด์คํ
ํจ์ ์ ์ธ์์ ๊ฒฝ์ฐ ๋ณ์ ๊ฐ์ฒด์ ํจ์๋ช ์ ํ๋กํผํฐ๋ก, ํจ์ ๊ฐ์ฒด๊ฐ ๊ฐ์ผ๋ก ํ ๋น๋๋ค. ๋ฐ๋ผ์, ํจ์ ์ ์ธ์์ ์ ์ธ๋ฌธ ์ด์ ์ ํจ์๋ฅผ ํธ์ถํ ์ ์๋ค.
hello(); // hello
function hello() { // ํจ์ ์ ์ธ์
console.log("hello");
}ํจ์ ํํ์์ ํจ์ ๊ฐ์ฒด์ ํจ์๋ช
์ ํ๋กํผํฐ๋ก ์ถ๊ฐํ์ง๋ง, ๊ทธ ๋ฐฉ์์ ์ผ๋ฐ ๋ณ์์ ๋ฐฉ์ ์ ๋ฐ๋ฅธ๋ค. ๋ฐ๋ผ์, ํจ์ ํํ์์ ์ ์ธ๋ฌธ ์ด์ ์ ํจ์๋ฅผ ํธ์ถํ ์ ์๋ค.
๋ณ์๋ ๋ณ์๋ช ์ด VO์ ํ๋กํผํฐ๋ก, undefined๊ฐ ๊ฐ์ผ๋ก ์ค์ ๋๋ค. ๋ณ์ ์ฒ๋ฆฌ๋ ๋ค์ ์ธ ๋จ๊ณ๋ก ๋๋์ด์ ์ด๋ฃจ์ด์ง๋ค.
1. ์ ์ธ ๋จ๊ณ
๋ณ์ ๊ฐ์ฒด์ ๋ณ์๋ฅผ ๋ฑ๋กํ๋ค. ์ด ๋ณ์๋ ์ค์ฝํ๊ฐ ์ฐธ์กฐํ ์ ์๋ ๋์์ด ๋๋ค.
2. ์ด๊ธฐํ ๋จ๊ณ
๋ณ์ ๊ฐ์ฒด์ ๋ฑ๋ก๋ ๋ณ์๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ๋ค.
์ด ๋จ๊ณ์์ ๋ณ์๋ undefined๋ก ์ด๊ธฐํ๋๋ค.
3. ํ ๋น ๋จ๊ณ
์ค์ ๊ฐ์ ํ ๋นํ๋ค.
var ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ ์ค์ฝํ ์ด๊ธฐ์ ์ ์ธ ๋จ๊ณ์ ์ด๊ธฐํ ๋จ๊ณ๊ฐ ํ ๋ฒ์ ์ด๋ฃจ์ด์ง๋ค. ๋ฐ๋ผ์, ๋ณ์ ์ ์ธ๋ฌธ ์ด์ ์ ๋ณ์์ ์ ๊ทผํ์ฌ๋ VO์ ๋ณ์๊ฐ ์๊ณ , ๋ฉ๋ชจ๋ฆฌ์๋ ํ ๋น๋์ด ์์ผ๋ฏ๋ก ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
// ์ค์ฝํ์ ์ด๊ธฐ์ ์ ์ธ ๋จ๊ณ(1)์ ์ด๊ธฐํ ๋จ๊ณ(2)๊ฐ ์คํ๋๋ค.
console.log(hello); // undefined
var hello; // ๋ณ์ ์ ์ธ๋ฌธ
console.log(hello); // undefined
hello = "hello"; // ํ ๋น๋ฌธ -> ํ ๋น ๋จ๊ณ(3)๊ฐ ์คํ๋๋ค.
console.log(hello); // hello๋ค๋ง, ์์ง ๋ณ์ x๋ 'xxx'๋ก ์ด๊ธฐํ๋์ง ์์๊ณ , ๋ณ์ ํ ๋น๋ฌธ์ ๋๋ฌํ๋ฉด ๊ฐ์ ํ ๋น์ด ์ด๋ฃจ์ด์ง๋ค.
์์์ ํจ์ ํํ์์ ์ผ๋ฐ ๋ณ์์ ๋ฐฉ์์ ๋ฐ๋ฅธ๋ค๊ณ ํ์๋ค. ๋ฐ๋ผ์, var ํค์๋๋ก ์ ์ธํ ํจ์ ํํ์์ ์ ์ธ๋ฌธ ์ด์ ์ ํธ์ถํ๋ฉด, undefined๊ฐ ๋ฐํ๋๋ค.
console.log(bye); // undefined
var bye = function () {
// ํจ์ ํํ์
console.log("bye");
};-
const, let ํค์๋์ ๋ณ์ ํธ์ด์คํ
ํจ์ ํํ์๊ณผ ๋ณ์๊ฐ const๋ let์ผ๋ก ํ ๋น๋๋ค๋ฉด, ๋ณ์๋ ํจ์ ํํ์ ์ ์ธ๋ฌธ ์ด์ ์ ํธ์ถํ๋ ค๊ณ ํ๋ฉด, Reference Error๊ฐ ๋ฐ์ํ๋ค. ์ด๋ const๋ let์ผ๋ก ํ ๋นํ ๋ณ์๋ ์ค์ฝํ ์ด๊ธฐ์ ์ ์ธ ๋จ๊ณ๋ง ์ผ์ด๋๊ณ , ์ ์ธ๋ฌธ์ ๋๋ฌํด์ผ ์ด๊ธฐํ ๋จ๊ณ๊ฐ ์ผ์ด๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ์ ์ธ๋ฌธ ์ด์ ์ ์ ๊ทผํ๋ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ํด๋น ๋ณ์๋ ํจ์ ํํ์์ด ์๊ธฐ ๋๋ฌธ์ Reference Error๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
console.log(goodBye); // ReferenceError: Cannot access 'goodBye' before initialization
const goodBye = function () {
// ํจ์ ํํ์
console.log("goodBye");
};๋ณ์ ์ ์ธ ์ฒ๋ฆฌ ํ, this value๊ฐ ๊ฒฐ์ ๋๋ค.
-
this value๊ฐ ๊ฒฐ์ ๋๊ธฐ ์ ์ this๋ ์ ์ญ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค๊ฐ, ํจ์ ํธ์ถ ํจํด์ ์ํด this์ ํ ๋น๋๋ ๊ฐ์ด ๊ฒฐ์ ๋๋ค.
-
์ ์ญ ์ฝ๋์ ๊ฒฝ์ฐ, VO, ์ค์ฝํ ์ฒด์ธ, this๋ ํญ์ ์ ์ญ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
์ง๊ธ๊น์ง๋ ํ๋ก๊ทธ๋จ ์คํ์ ์ํ ์ค๋น ๊ณผ์ ์ด์๋ค. ์ง๊ธ๋ถํฐ ์ฝ๋๊ฐ ์์๋๋ค.
var x = 'xxx';
function foo () {
var y = 'yyy';
function bar () {
var z = 'zzz';
console.log(x + y + z);
}
bar();
}
foo()์ ์์ ์์๋ ๋ณ์ x์ 'xxx'ํ ๋น๊ณผ ํจ์ foo์ ํธ์ถ์ด ์คํ๋๋ค.
ํ์ฌ ์คํ ์ปจํ ์คํธ์ ์ค์ฝํ ์ฒด์ธ์ ์ฐธ์กฐ ๊ฐ๋ฅํ VO๋ฅผ ๋ฆฌ์คํธ๋ก ๊ฐ๊ณ ์๋ค. 0๋ฒ์งธ VO๋ถํฐ ๊ฒ์ํ์ฌ ๋ณ์๋ช x์ ํด๋นํ๋ ํ๋กํผํฐ๊ฐ ๋ฐ๊ฒฌ๋๋ฉด, ๊ทธ ํ๋กํผํฐ์ ๊ฐ 'xxx'๋ฅผ ํ ๋นํ๋ค.
- ํจ์ foo๊ฐ ํธ์ถ๋๋ฉด, ์๋ก์ด ํจ์ ์คํ ์ปจํ ์คํธ๊ฐ ์๊ธฐ๊ณ , ์คํ ์ปจํ ์คํธ ์คํ์ push๋๋ค.
- ์ปจํธ๋กค์ด ํจ์ foo์ ์คํ ์ปจํ ์คํธ๋ก ์ด๋ํ๋ฉด, ๋ง์ฐฌ๊ฐ์ง๋ก 1. ์ค์ฝํ ์ฒด์ธ์ ์์ฑ๊ณผ ์ด๊ธฐํ, 2. ๋ณ์ ๊ฐ์ฒดํ ์คํ 3. this value ๊ฒฐ์ ์ด ์์ฐจ์ ์ผ๋ก ์คํ๋๋ค.
- ๋จ, ์ด ์ฝ๋๋ ์ ์ญ์ฝ๋๊ฐ ์๋ ํจ์ ์ฝ๋์ด๋ฏ๋ก, ํจ์ ์ฝ๋์ ๋ฃฐ์ด ์ ์ฉ๋๋ค.
ํจ์ ์ปจํ
์คํธ์ ์ค์ฝํ ์ฒด์ธ์ Scope = AO + [[Scopes]]๋ก ์ ์ํ ์ ์์ผ๋ฉฐ, ๋ณดํต ๋ฐฐ์ด๋ก ๋ํ๋ธ๋ค๋ ๊ฒ์ ๊ธฐ์ตํด์ผ ํ๋ค. fooํจ์์ [[Scopes]]๋ [1]์ ์ญ ์ฝ๋๋ก ์ง์
์ ๊ฒฐ์ ๋์์ผ๋ฉฐ, ๊ทธ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์๋ค.
foo.[[Scopes]] = [ globalContext.VO ]
-
์ด ํจ์์ ๋ณ์ ๊ฐ์ฒด์ธ AO๊ฐ ์์ฑ๋๋ค.
-
ํจ์ foo์ ์ค์ฝํ ์ฒด์ธ์ ๋จผ์ ์์ ์ ์คํ ํ๊ฒฝ์ธ foo์ Activation Object(AO)๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
-
AO๋ arguments ํ๋กํผํฐ์ ์ด๊ธฐํ๋ฅผ ์คํํ๋ค.
-
fooํจ์์
[[Scopes]]๊ฐ ์ค์ฝํ ์ฒด์ธ์ push๋๋ค. ์ฆ, foo์ ์ค์ฝํ ์ฒด์ธ์ AO์ GO๋ฅผ ์์ฐจ์ ์ผ๋ก ๋ด์ ๋ฆฌ์คํธ๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.fooContext.Scope = fooContext.AO + foo.[[Scopes]]
fooContext.Scope = [ fooContext.AO, globalContext.VO ]
Function Code๋ AO์ ๋ํด ๋ณ์ ๊ฐ์ฒดํ๋ฅผ ์คํํ๋ค. 1. bar ํจ์ ์ฒ๋ฆฌ - bar ํจ์ ์์ฑ
- AO์ ํจ์ ์ด๋ฆ bar๋ฅผ ํ๋กํผํฐ๋ก, bar์ ํจ์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ผ๋ก ํ์ฌ ํจ์๋ฅผ ์ถ๊ฐํ๋ค.
- bar ํจ์ ๊ฐ์ฒด์ ๋ด๋ถ ํ๋กํผํฐ์ธ
[[Scopes]]ํ๋กํผํฐ๋ ์ค์ฝํ ์ฒด์ธ์ด ๊ฐ๋ฆฌํค๋ ๊ฐ์ ๊ฐ๋ฆฌํจ๋ค.
bar.[[Scope]] = [ fooContext.AO, globalContext.VO ]
๋ณ์๋ช y๋ฅผ ํ๋กํผํฐ๋ก, undefined๋ฅผ ๊ฐ์ผ๋ก ํ์ฌ AO์ ์ถ๊ฐํ๋ค.
this์ ํ ๋น๋๋ ๊ฐ์ ํจ์ ํธ์ถ ํจํด์ ์ํด ๊ฒฐ์ ๋๋ค.
var x = 'xxx';
function foo () {
var y = 'yyy';
function bar () {
var z = 'zzz';
console.log(x + y + z);
}
bar();
}
foo();๋จผ์ y ๋ณ์์ 'yyy'๋ฅผ ํ ๋นํ๊ณ , ํจ์ bar๊ฐ ์คํ๋๋ค.
๋ณ์ y์ ๊ฐ์ ํ ๋นํ๊ธฐ ์ํด, ์ค์ฝํ ์ฒด์ธ์ ๋ฐ๋ผ ๊ฐ๋ฉฐ VO์ ๋ณ์๋ช y๋ฅผ ๊ฒ์ํ๋ค. y๋ฅผ ๋ฐ๊ฒฌํ๋ฉด, ๊ทธ ํ๋กํผํฐ์ ๊ฐ์ 'yyy'๋ก ํ ๋นํ๋ค.
ํจ์ bar๊ฐ ํธ์ถ๋๋ฉด, bar์ ์คํ ์ปจํ ์คํธ๊ฐ ์์ฑ๋๊ณ , ์คํ ์ปจํ ์คํธ ์คํ์ ํธ์ฌ๋๋ค. ์คํ ์ปจํ ์คํธ์ 1. ์ค์ฝํ ์ฒด์ธ์ ์์ฑ๊ณผ ์ด๊ธฐํ 2. ๋ณ์ ๊ฐ์ฒดํ ์คํ 3. this ๊ฒฐ์ ์ด ์์ฐจ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
์ค์ฝํ ์ฒด์ธ ์์ฑ์, bar์ ์ค์ฝํ ์ฒด์ธ์ bar์ VO์ธ AO-2๋ฅผ ์ฐธ์กฐํ๊ฒ ๋๋ค. ๊ทธ ํ bar์ [[Scopes]]๋ฅผ ์ค์ฝํ ์ฒด์ธ์ pushํ๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก bar ํจ์ ์ปจํ
์คํธ์ ์ค์ฝํ ์ฒด์ธ์ ๋ค์์ฒ๋ผ ๊ตฌ์ฑ๋๋ค.
barContext.Scope = [ barContext.AO fooContext.AO, globalContext.VO ]
console.log(x + y + z);์ ๊ฒฐ๊ณผ๋ xxxyyyzzz์ธ๋ฐ, bar ํจ์ ์ปจํ
์คํธ์ ์ค์ฝํ ์ฒด์ธ์์ ๋ณ์๋ฅผ ๊ฒ์ํ์ฌ ์ฐพ์ ์ ์๋ค.
barContext.Scope = [ barContext.AO - z : 'zzz' fooContext.AO, - y : 'yyy' globalContext.VO - x : 'xxx' ]
-
์คํ ์ปจํ ์คํธ๋ ํจ์ ํธ์ถ์ ์์ฑ๋๋ฉฐ, ์คํ ์ปจํ ์คํธ ์คํ์ ํธ์ฌ๋๋ค.
-
์คํ ์ปจํ ์คํธ ์์ฑ์ ์คํ ์ปจํ ์คํธ์ ์ธ ๊ฐ์ง ๊ฐ์ฒด์ ๋ํ ์ฒ๋ฆฌ๊ฐ ์ด๋ฃจ์ด์ง๋ค.
- ์ค์ฝํ์ฒด์ธ ์์ฑ๊ณผ ์ด๊ธฐํ
- ํจ์ ์ปจํ
์คํธ์ ๊ฒฝ์ฐ ์ค์ฝํ ์ฒด์ธ์
Scope = AO + [[Scopes]]์ด๋ค.
- ํจ์ ์ปจํ
์คํธ์ ๊ฒฝ์ฐ ์ค์ฝํ ์ฒด์ธ์
- ๋ณ์ ๊ฐ์ฒดํ
- ๋งค๊ฐ๋ณ์์ ์ธ์ ์ ๋ณด ์ถ๊ฐ
- ํจ์ ํธ์ด์คํ
- property : ํจ์ ์ด๋ฆ
- value : ํจ์ ๊ฐ์ฒด
- ๋ณ์ ํธ์ด์คํ
- property : ๋ณ์๋ช
- value : undefined
- this value ๊ฒฐ์
- ์ค์ฝํ์ฒด์ธ ์์ฑ๊ณผ ์ด๊ธฐํ
-
ํจ์์
[[Scopes]]๊ฒฐ์ - ํจ์ ๊ฐ์ฒด ์์ฑ ์ ๊ฒฐ์ ๋๋ค.
- ํจ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์คํ ์ปจํ ์คํธ์ ์ค์ฝํ ์ฒด์ธ์ด ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.















