๋ฌธ์ ๋ชฉ๋ก์ผ๋ก ๋์๊ฐ๊ธฐ
๐ก์ง์์๋ต์ https://github.com/pul8219/TIL
Issues
ํญ์ ์๋ง์ step ์ด์์์ ๋จ๊ฒจ์ฃผ์ธ์. โก๏ธ Issueํญ์ผ๋ก ์ด๋
- ์์ฑ์: Wol-dan (@pul8219)
- ์คํฐ๋ ์ฃผ์ : FrontEnd ๋ฉด์ ์คํฐ๋ https://gitlab.com/siots-study/topics/-/wikis/home
- ๊ณต๋ถ ๋ฒ์:
์ฌํ1
์ const์ let์ ์ฐจ์ด ~ ๋ค์คํ ๋ ์ค์ฝํ(Nested scopes)์์์ ๋ ์์ปฌ ์ค์ฝํ(Lexical scoping)- ๊ธฐํ: 7/4(ํ ) ~ 7/7(ํ)
- var
- const์ let
- Scope
- Lexical Scope
- Hoisting
- ๊ถ๊ธ์ฆ
- ๊ธฐํ, ์ ์ญ ๊ฐ์ฒด
window
, ํ์ดํ ํจ์, ์ฆ์ ์คํ ํจ์
- ๊ธฐํ, ์ ์ญ ๊ฐ์ฒด
๐ฌ
- ์ฌ์ ์ธ ๊ฐ๋ฅ
function-level-scope
(ํจ์ ์ค์ฝํ)๋ฅผ ๊ฐ๋๋ค.- ์ ์ญ ์ค์ฝํ์์ ์ ์ธ๋ var ๋ณ์๋ ์ ์ญ๋ณ์์ด๋ค.
- ์ ์ธ ์ ์ ์ฐธ์กฐ ๊ฐ๋ฅํ๋ค.(๊ทธ๋ฌ๋ ์ด ๋ ๊ฐ์
undefined
์ด๋ค.) ์ ์ธ ์ ์ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ๋ค๋...var
์ฌ์ฉ์ ์์์น ๋ชปํ ๋ฒ๊ทธ๋ฅผ ์ผ์ผํฌ ์ ์๋ค. ์ฌ์ฉ์ ์ง์ํ์. var
๋ก ๋ณ์ ์์ฑ์ ์ ์ธ๊ณผ ์ด๊ธฐํ๊ฐ ๋์์ ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ํธ์ด์คํ ํ์ ์ด ๋ํ๋๋ค.
var x = 0;
{
var x = 1;
console.log(x); // 1
}
console.log(x); // 1 ๐ ์ฝ๋ ๋ธ๋ก({})๋ด์ ์ ์ธ๋ var๋ณ์ x๋ ํจ์ ์ค์ฝํ์ด๊ธฐ ๋๋ฌธ์ {}์ ๊ตฌ์ ๋ฐ์ง ์๊ณ ์ ์ญ๋ณ์๊ฐ ๋๋ค.
var sum = 0;
for (var i = 0; i < 10; i++) {
sum += i;
}
console.log(sum);
console.log(i); // 10 ์ถ๋ ฅ ๐ var๋ ํจ์ ์ค์ฝํ์ด๊ธฐ ๋๋ฌธ์ for๋ฌธ ์์์ ์ ์ธ๋ ๋ณ์๋ for block ๋ฐ์์๋ ์ ํจํ ์ ์ญ ๋ณ์๊ฐ ๋๋ค.
block-level-scope
(๋ธ๋ก ์ค์ฝํ)- ์ฌ์ ์ธ ๋ถ๊ฐ
- const์ let์ ๋ณ์๊ฐ ์ ์ธ๋๊ธฐ ์ ์ ์ฐธ์กฐํ ์ ์๋ค.
let foo = 123;
{
let foo = 456; // ์ง์ญ ๋ณ์ ๐ ์ ์ญ์์ ์ ์ธ๋ ๋ณ์ foo์๋ ๋ค๋ฅธ ๋ณ๊ฐ์ ๋ณ์์ด๋ค.
let bar = 456; // ์ง์ญ ๋ณ์
}
console.log(foo); // 123
console.log(bar); // ReferenceError: bar is not defined ๐ ์ ์ญ์์๋ ์ฝ๋ ๋ธ๋ก ๋ด์ ์ ์ธ๋ bar ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ค. let์ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ์ด๊ธฐ ๋๋ฌธ!
๐ก [์ฐธ๊ณ ]
let
์ ์ ์ญ ์ค์ฝํ์์ ์ ์ธ๋๋๋ผ๋ ์ ์ญ ๋ณ์๊ฐ ์๋๋ค.
let
์ ์ ์ญ ๋ณ์๊ฐ ์๋๊ณ ๋ฐ๋ผ์ window ๊ฐ์ฒด์๋ ๋ด๊ธฐ์ง ์์ผ๋ฉฐ์ง์ญ ๋ณ์
์ด๋ค.
var foo = 123;
var foo = 456; // ์ค๋ณต ์ ์ธ ๊ฐ๋ฅ
let bar = 123;
let bar = 456; // Uncaught SyntaxError ๐ ์ฌ์ ์ธ ๋ถ๊ฐ
[์ฐธ๊ณ ]
ํจ์ ์ค์ฝํ
์๋ธ๋ก ์ค์ฝํ
ํจ์ ์ค์ฝํ: ํจ์ ๋จ์๋ก ๋ฒ์๋ฅผ ์ง์
๋ธ๋ก ์ค์ฝํ: ์ค๊ดํธ({}) ๋จ์๋ก ๋ฒ์๋ฅผ ์ง์
let
์ ์ฌํ ๋น ๊ฐ๋ฅ,const
๋ ์ฌํ ๋น ๋ถ๊ฐ (๋ณํ์ง ์๋ ๊ฐ์๋const
(์์)๋ฅผ ์ฌ์ฉํ์)const
๋ ์ ์ธ๊ณผ ํ ๋น์ ๋์์ ํด์ค์ผ ํ๋ค.
let x; // ์ด๋ ๊ฒ ์ด๊ธฐํํ์ง ์์ผ๋ฉด undefined๊ฐ ํ ๋น๋๋ค.
// const x; // const ํค์๋๋ ์ ์ธ๊ณผ ํ ๋น์ ๋์์ ํด์ผํ๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒ ์์ฑํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
Scope(์ค์ฝํ, ์ ํจ๋ฒ์)๋ ์ฐธ์กฐ ๋์ ์๋ณ์(identifier, ๋ณ์, ํจ์์ ์ด๋ฆ ๋ฑ)๋ฅผ ์ฐพ์๋ด๊ธฐ ์ํ ๊ท์น์ด๋ค. ์ด๋ค ๋ณ์์ ์ ๊ทผํ ์ ์๋์ง๋ฅผ ์ ์ํ๋ค.
- Scope A์ ์ธ๋ถ์์ ์ ์ธํ ๋ณ์๋, A์ ์ธ๋ถ/๋ด๋ถ์์ ๋ชจ๋ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
- A์ ๋ด๋ถ์์ ์ ์ธํ ๋ณ์๋ ์ค์ง A์ ๋ด๋ถ์์๋ง ์ ๊ทผํ ์ ์๋ค.
Scope์ ๊ฐ๋ (MDN)
ํ์ฌ ์คํ ๋ฌธ๋งฅ(context)์ด๋ค. context๋ ์ด๋ค value์ expression์ด ๋ณด์ด๊ฑฐ๋ ์ฐธ์กฐ๋ ์ ์๋๋ฅผ ์๋ฏธํ๋ค. ๋ณ์๋ ํํ์์ด ํ์ฌ ์ค์ฝํ์ ์๋ค๋ฉด ์ด์ฉ๋ถ๊ฐ๋ฅํ๋ค. ์ค์ฝํ๋ ๊ณ์ธต์ ์ผ๋ก ๋์ด์์ผ๋ฉฐ ์์ ์ค์ฝํ๋ ๋ถ๋ชจ์ค์ฝํ์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ ๊ทธ ๋ฐ๋๋ ๋ถ๊ฐ๋ฅํ๋ค.
- ์ ์ญ ์ค์ฝํ
- ์ง์ญ ์ค์ฝํ
- ํจ์ ์ค์ฝํ: ํจ์ ๋ด๋ถ์์ ๋ณ์๋ฅผ ์ ์ธํ ๊ฒฝ์ฐ, ํด๋น ๋ณ์๋ ์ ์ธํ ํจ์ ๋ด๋ถ์์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- ๋ธ๋ก ์ค์ฝํ: ์ค๊ดํธ
{}
๋ด๋ถ์์const
๋๋let
์ผ๋ก ๋ณ์๋ฅผ ์ ์ธํ ๊ฒฝ์ฐ, ํด๋น ๋ณ์๋ค์ ์ค๊ดํธ ๋ธ๋ก ๋ด๋ถ์์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
์๋ณ์์ ์ ํจ๋ฒ์๋ฅผ ๊ฒ์ํด๋๊ฐ๋ ์ผ๋ จ์ ๊ณผ์ ์ด๋ค. ๋ณ์๊ฐ ์ค์ฝํ ์์ ์ ์ธ๋์ง ์์๋ค๋ฉด, ๊ทธ ๋ณ์๋ฅผ ์ฐพ๊ธฐ ์ํด ๋ถ๋ชจ ์ค์ฝํ๋ก ์ฌ๋ผ๊ฐ๊ณ , ๊ฑฐ๊ธฐ์๋ ์๋ค๋ฉด ๋ ๊ทธ ๋ถ๋ชจ ์ค์ฝํ์ ์ฌ๋ผ๊ฐ์ ์ฐพ๋๋ค.
์ค์ฝํ ์ฒด์ธ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฒ์ outerEnvironmentReference
์ด๋ค. (์คํ ์ปจํ
์คํธ์ Lexical Environment
์ฐธ๊ณ )
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ํจ์๋ฅผ ์ด๋์ ์ ์ธํ๋์ง์ ๋ฐ๋ผ ์์ ์ค์ฝํ๊ฐ ๊ฒฐ์ ๋๋ค.
๋ค์ ์์ ๋ฅผ ๋ณด์.
var x = 1;
function foo() {
var x = 10;
bar();
}
function bar() {
console.log(x);
}
foo(); // ?
bar(); // ?
์ ์์ ์ ๊ฒฐ๊ณผ 10
๊ณผ 1
์ด ์ถ๋ ฅ๋๋ ๊ฒ์ด ์๋, 1
๊ณผ 1
์ด ์ถ๋ ฅ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ Lexical Scope๋ฅผ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ํจ์์ ํธ์ถ์ด ์๋ ํจ์์ ์ ์ธ์ ๋ฐ๋ผ ์์ ์ค์ฝํ๊ฐ ๊ฒฐ์ ๋๋ค. ์ ์ฝ๋์์ bar()
ํจ์์ ์์ ์ค์ฝํ๋ ์ ์ญ์ ๊ฐ๋ฆฌํค๊ธฐ ๋๋ฌธ์ ์ ์ญ ๋ณ์์ธ x๊ฐ์ธ 1
์ด ๋๋ฒ ์ถ๋ ฅ๋์์์ ์ ์ ์๋ค. ๋ง์ฝ bar()
ํจ์๊ฐ foo()
ํจ์ ๋ด์ ์ ์ธ๋์ด์์๋ค๋ฉด bar()
ํจ์์ ์์ ์ค์ฝํ๋ foo()
ํจ์์ผ ๊ฒ์ด๋ค.
[์ฐธ๊ณ ] Dynamic Scope
ํจ์์ ํธ์ถ์ ๋ฐ๋ผ ์์ ์ค์ฝํ๊ฐ ์ ํด์ง๋ ๊ฒ
-
ํธ์ด์คํ
์ ๋์ด์ฌ๋ ค์ง๋ค๋ ์๋ฏธ -> ๋ฌด์์ด ๋์ด์ฌ๋ ค์ง๋?๋ณ์์
์ ์ธ๋ถ
๋๋ ํจ์๊ฐ ํ์ฌ ์ค์ฝํ ์ ์ต์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ง๋ค! -
๋ณ์์ ๊ฒฝ์ฐ, ํจ์๋ด์์ ์ ์๋์์ ๊ฒฝ์ฐ์ ์ ์ธ์ด ํจ์์ ์ต์๋จ์ผ๋ก, ํจ์ ๋ฐ๊นฅ์์ ์ ์๋์์ ๊ฒฝ์ฐ๋ ์ ์ญ ์์ญ์ ์ต์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ง๋ค.
hoisting();
function hoisting() {
console.log(x);
var x = 'hello';
}
์ ์์ ๋ฅผ ์คํํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๊ณ undefined
๊ฐ ์ถ๋ ฅ๋๋ค. ๊ทธ ์ด์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ง ๋ด๋ถ์ ์ผ๋ก ์ ์ฝ๋๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ํด์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
hoisting();
function hoisting() {
var x; // ๐ ๋ณ์ ์ ์ธ์ ๋์ด์ฌ๋ฆฐ๋ค.(๋ณ์ ํธ์ด์คํ
) ์ด ์์ ์ var๊ฐ์ ํ ๋น ์ ์ด๊ณ , var์ ํน์ฑ์ ์ ์ธ๊ณผ ์ด๊ธฐํ๊ฐ ๋์์ ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ undefined๋ก ์ด๊ธฐํ๋๋ค.
console.log(x); // undefined ์ถ๋ ฅ
x = 'hello'; // ์ฌ๊ธฐ์ undefined์์ 'hello'๋ก ํ ๋น์ด ์ด๋ค์ง๋ค.
}
ํจ์ ์ ์ธ๋ฌธ ๋ฐฉ์๋ ํธ์ด์คํ ๋๋ค. (๋จ, ํจ์ ํํ์๊ณผ new ํค์๋๋ฅผ ์ด์ฉํ ํจ์ ์ ์์์ ํธ์ด์คํ ์๋จ)
// ํจ์ ์ ์ธ๋ฌธ์ ๊ฒฝ์ฐ - ํธ์ด์คํ
, ์๋ฌ ๋ฐ์X
hoisting();
function hoisting() {
console.log(x);
var x = 'hello';
}
// ํจ์ ํํ์์ ๊ฒฝ์ฐ - ํธ์ด์คํ
X, ์๋ฌ ๋ฐ์
hoisting();
var hoisting = function () {
console.log(x);
var x = 'hello';
};
// new ํจ์ ๊ฐ์ฒด ์์ฑ - ํธ์ด์คํ
X, ์๋ฌ ๋ฐ์
hoisting();
var hoisting = new Function('', console.log('hello'));
yes!
-
const, let ๋ณ์๋ ํธ์ด์คํ ์
uninitialized
๋ก ์ด๊ธฐํ๋๋ค. -
๋ณ์๊ฐ ์ด๊ธฐํ๋๊ธฐ ์ ์ ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด
undefined
๊ฐ ์ถ๋ ฅ๋๋๊ฒ ์๋๋ผ,ReferenceError
๊ฐ ๋ฐ์ํ๋ค.- Why? const, let์
TDZ
์ ์ํด ์ ์ฝ๋ฐ๊ธฐ ๋๋ฌธ์ด๋ค.
- Why? const, let์
console.log(x); // ReferenceError: x is not defined
const x = 'hello';
-
TDZ๋?
Temporal Dead Zone(์ผ์์ ์ฌ๊ฐ์ง๋)
- ๋ณ์์ ์ ์ธ๋ถํฐ ๋ณ์ ์ด๊ธฐํ ์ฌ์ด์ ๋ณ์์ ์ ๊ทผํ ์ ์๋ ์ง์ ์ ์๋ฏธ
const
์let
์ ๊ฒฝ์ฐ, ๋ณ์ ์์ฑ์ReferenceError
๊ฐ ๋ฐ์ธ๋ฉ๋๋ค. (์์ธํ ๋ฐ์ธ๋ฉ ์์ ์ ๋ชจ๋ฆ) ๐ ์ด๋ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ์งํค๊ธฐ ์ํจlet
: ๊ฐ ํ ๋น ์ ์ ๋ณ์๊ฐ ์ ์ธ๋์ด ์์ด์ผ ํ๋ค๋ ๊ท์นconst
: ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ๋์ด์ผ ํ๋ค๋ ๊ท์น
๋ค์ ์์ ๋ก const
์ let
์ ์ฌ์ฉํ ๋ TDZ
์ ์ ์ฝ์ ๋ฐ๋ ์ํฉ์ ์๊ฐํด๋ณด์.
const test = '123';
function a() {
console.log(test);
let test = '456';
}
a(); // ?
ํธ์ด์คํ
์ด ์ผ์ด๋์ง ์์๋ค๋ฉด a()
ํจ์ ํธ์ถ์ ๊ฒฐ๊ณผ๋ก 123
์ด ์ถ๋ ฅ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ ์ ์ฝ๋๋ฅผ ์คํํ๋ฉด 123
์ด ์ถ๋ ฅ๋๋ ๊ฒ์ด ์๋๋ผ ReferenceError
๊ฐ ๋ฐ์ํ๋ค. const
์ let
์ ์ด๊ธฐํ๋๊ธฐ ์ ๊น์ง๋ ์ก์ธ์คํ ์ ์๋ TDZ
ํ์์ด ์ผ์ด๋๊ธฐ ๋๋ฌธ์ด๋ค. ์ ์ฝ๋๊ฐ ์คํ๋๋ ๋ด๋ถ์ ์ธ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
const test = '123';
function a() {
// let test; // ํธ์ด์คํ
์ ์ํด ๋ณ์ ์ ์ธ๋ถ๊ฐ ์ค์ฝํ ์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ง๋ค.
// ๋ณ์๊ฐ ์ ์ธ๋์ง๋ง ์์ง ์ด๊ธฐํ ๊ตฌ๋ฌธ์ ๋ง๋์ง ์์๋ค.
// ๊ทธ๋ฌ๋ฏ๋ก ์๋ test = '456';์์ ํ ๋น์ด ์ด๋ค์ง๊ธฐ ์ ๊น์ง TDZ๊ตฌ๊ฐ์ด ํ์ฑ๋๋ค.
console.log(test); // Reference Error ๋ฐ์! ๐ TDZ ๊ตฌ๊ฐ์์๋ ํด๋น ๋ณ์๋ฅผ ์ก์ธ์คํ ์ ์๋ค.
let test = '456'; // ๋ณ์๊ฐ ํ ๋น๋ ์์ ๋ถํฐ๋ TDZ ์ํ๋ฅผ ๋ ๋๊ฒ๋๊ณ , ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
}
a();
- ์๋ฐ์คํฌ๋ฆฝํธ์์๋
์ค์ฒฉ(nested) ํจ์
๊ฐ ํํ ์ฌ์ฉ๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์์์ ์ ์ญ ๋ณ์
- ์ ์ผํ๋ฉฐ ์ด๋ค ์ปจํ ์คํธ๊ฐ ์คํ๋๊ธฐ ์ ์ ๋จผ์ ์์ฑ๋๋ค.
- ๋ด๋ถ์ ์์ฑ์๊ฐ ์๋ค. new๋ฅผ ์ธ ์ ์๋ค.
window ๊ฐ์ฒด
- BOM ๋ธ๋ผ์ฐ์ ์ ์์, JS ์์ง, ๋ณ์, ๊ฐ์ฒด, ํญ, ์ฃผ์์ฐฝ, ์ฆ๊ฒจ์ฐพ๊ธฐ, ํด๋ฐ
- DOM Document ๊ฐ์ฒด
[์ฐธ๊ณ ] Node.js์์์ ์ ์ญ ๊ฐ์ฒด
node์์์ ์ ์ญ ๊ฐ์ฒด: global
globalThis
ํ๊ฒฝ๊ณผ ๋ฌด๊ดํ๊ฒ ์ ์ญ ๋ฒ์์ ์ ๊ทผํ ์ ์๋๋ก ES2020์์ ์ถ๊ฐ๋ ์ฌ์. (IE ๋นผ๊ณ ์ ๋๋ค.)
// ๋ธ๋ผ์ฐ์ globalThis === window; // true // Node.js globalThis === global; // true
โ ํจ์๋ ๋ฐ๋ก ์ ๋ฆฌํ์
- ํญ์ ์ต๋ช ์ด๋ค.
// ์ผ๋ฐ ํจ์
var foo = function () {
console.log('foo');
};
// ํ์ดํ ํจ์
var bar = () => console.log('bar'); // ๋งค๊ฐ๋ณ์๊ฐ ์๋ ๊ฒฝ์ฐ
ํจ์๋ฅผ ์ ์ํ๊ณ ๋ฐ๋ก ์คํํ๋ ๋ฐฉ์
- ๊ธฐ๋ณธ ํํ
(function () {
// statements
})();
- ์ฝ์งํ๋ ๊ฐ๋ฐ์ Javascript
- let, const๋? ๊ทธ๋ฆฌ๊ณ ์ ์จ์ผ๋ง ํ๋๊ฐ?(ES6)
- let๊ณผ const๋ ํธ์ด์คํ ๋ ๊น?
- Hoisting
- Scope์ Hoisting์ ์์๋ณด์
- var๋ฅผ ์ฌ์ฉํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ๋ค
- Lexical Scope
- ํธ์ด์คํ , TDZ(1), ํธ์ด์คํ , TDZ(2)
- Scope chain์ด๋?
๋ณ์์ ์ ์ธ๋ถ๋ ํจ์๊ฐ ํ์ฌ ์ค์ฝํ์ ์ต์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ง๋ ํ์. ์ค์ ๋ก ๋์ด์ฌ๋ ค์ง๋ ๊ฒ์ ์๋๋ js๊ฐ ๊ทธ๋ ๊ฒ ํด์ํ๋ค๋ ๋ป.
Q.function foo(){}
์ var foo = function(){}
์ฌ์ด์์ foo ์ฌ์ฉ๋ฒ์ ์ฐจ์ด์ ๋ํด ์ค๋ช
ํ์์ค
- ์ ์๋ ํจ์ ์ ์ธ๋ฌธ. ํธ์ด์คํ ์ด ๋๊ธฐ๋๋ฌธ์ ์ด ํจ์์ ์ธ๋ฌธ ์ ์ foo๋ฅผ ํธ์ถํด๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์.
- ํ์๋ ํจ์ ํํ์. ํธ์ด์คํ ์ด ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ด ํจ์ ํํ์ ์ด์ ์ foo๋ฅผ ํธ์ถํ ๊ฒฝ์ฐ ์๋ฌ๊ฐ ๋ฐ์ํจ.
- var: ์ฌ์ ์ธ ๊ฐ๋ฅ, ํจ์ ์ค์ฝํ. ์ ์ธ ์ ์ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ์ง์ํด์ผํจ
- let, const: ์ฌ์ ์ธ์ด ๋ถ๊ฐ. ๋ธ๋ก ์ค์ฝํ. let์ ์ฌํ ๋น ๊ฐ๋ฅํ๋, const๋ ์ฌํ ๋น์ด ๋ถ๊ฐ๋ฅํ ์์์. ๋ํ const๋ ์ ์ธ๊ณผ ํ ๋น์ ๋์์ ํด์ผ ์๋ฌ๊ฐ ๋์ง ์์.(let์ ์ด๊ธฐํ์์ด ์ ์ธ๋ง ํ๋ฉด ์๋ฌ๊ฐ ๋์ง ์๊ณ undefined๊ฐ ์๋์ผ๋ก ํ ๋น๋จ.)
- ํด๋ก์ ๊ฐ ๋ฌด์์ด๊ณ ์ ์ฐ๋์ง ์ค๋ช ํ๊ณ ๊ฐ๋จํ๊ฒ ์ฝ๋๋ก ๊ตฌํํด๋ณด์๋ผ
- ํ์ดํ ํจ์์ ์ผ๋ฐํจ์์์ ์ฐจ์ด์ ์?
- ์๋ฐ์คํฌ๋ฆฝํธ์์ this๋ ๋ฌด์์ธ๊ฐ?
์ ์ญ ๊ณต๊ฐ์์ window
ํจ์ ๋ด๋ถ์์ window
๋ฉ์๋ ํธ์ถ ์ ๋ฉ์๋ ํธ์ถ ์ฃผ์ฒด
์ฝ๋ฐฑ์์ window - ํ์ง๋ง this๋ฅผ ๋ช
์ํ๊ฑฐ๋ this๋ฅผ ๋ฐ์ธ๋ฉํด์ ๋๊ธฐ๋ฉด ๊ทธ์ ๋ฐ๋ฅธ๋ค.
์์ฑ์ ํจ์์์ ์ธ์คํด์ค
-
Function.prototype.bind์ ๋ํด ์ค๋ช ํ์์ค.
-
์๊ฒฉ๋ชจ๋๊ฐ ๋ฌด์์ด๊ณ ์ด๋ป๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ธ์ง?
-
๊ณ ์ฐจ ํจ์์ ์ ์๋ ๋ฌด์์ ๋๊น?