ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ๋ ๊ธฐ๋ณธ ๋จ์ / ์ต์ ์คํ ๋จ์
1. ํํ์์ธ ๋ฌธ => ๋ณ์ ํ ๋น ๊ฐ๋ฅ
2. ํํ์์ด ์๋ ๋ฌธ => ๋ณ์ ํ ๋น ๋ถ๊ฐ๋ฅ (ex ํจ์ ์ ์ธ๋ฌธ , ๋ณ์ ์ ์ธ๋ฌธ)
- ํจ์์ ์ธ์ : ์ ์ธ์ด๋ฏ๋ก ํธ์ด์คํ ๋ฐ์
(ํจ์ ํธ์ด์คํ ) , ์๋ฌต์ ์ผ๋ก ์์ฑํ ์๋ณ์ ์ฌ์ฉ- ํจ์ํํ์ : ๋ณ์์ ๊ฐ์ ๋ฃ์ผ๋ฏ๋ก ๋ณ์์ ๋ํด ํธ์ด์คํ ๋ฐ์
(๋ณ์ ํธ์ด์คํ ) , ์๋ฌต์ ์ด์ง ์์ ์๋ณ์ ์ฌ์ฉ- Function ์์ฑ์ํจ์
- ํ์ดํ ํจ์
์ผ๊ธ๊ฐ์ฒด: ํจ์๋ฅผ ๊ฐ์ฒ๋ผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ๋ค.
์ฐธ์กฐ์ ์ํ ์ ๋ฌ๋ก ์ธํ ์ธ๋ถ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ํผํด๋ผ
=> ๊ฐ์ฒด๋ฅผ ๋ถ๋ณ๊ฐ์ฒด๋ก ๋ง๋ค์ด๋ผ
=> ๊น์ ๋ณต์ฌ๋ฅผ ํตํด ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑ
ํจ์์ ์ธ๋ถ์์ ์ฝ๋ฐฑํจ์๋ฅผ ์ ๋ฌ๋ฐ์ ํจ์
map filter forEach
์์ํจ์ : ์ด๋ค ์ธ๋ถ ์ํ์ ์์กดํ์ง๋ ์๊ณ ๋ณ๊ฒฝํ์ง๋ ์๋ ๋ถ์ํจ๊ณผ X
๋น์์ํจ์ : ์ธ๋ถ ์ํ์ ์์กดํ๊ฑฐ๋ ์ธ๋ถ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ถ์ํจ๊ณผ O
์์ํจ์๋ ์์ํ์ ๋ํด ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ์์ํจ์๋ฅผ ์ ์งํ๋ค.
๋ฐ๋ฉด ๋น์์ํจ์๋ ์์ํ์ ๋ํด ์ง์ ๊ฐ์ ๋ฐ์ ๋ณ๊ฒฝํ์ฌ ์ธ๋ถ ์ํ(๊ฐ)๋ฅผ ๋ณ๊ฒฝํ๋ค.
์์ํจ์๋ ์ฐธ์กฐํ์ ๋ํด ๊น์ ๋ณต์ฌ๋ฅผ ํตํด ์ธ๋ถ๊ฐ์ ์ํฅ์ ์ฃผ์ง์๋๋ค.
๋ฐ๋ฉด ๋น์์ํจ์๋ ๊น์๋ณต์ฌ์์ด ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ๊ฐ์ ๋ณ๊ฒฝํ์ฌ ์ธ๋ถ ์ํ(๊ฐ)๋ฅผ ๋ณ๊ฒฝํ๋ค.
var : ํจ์๋ ๋ฒจ ์ค์ฝํ (ํจ์๋ชธ์ฒด์์์๋ง ์ค์ฝํ ์๋)
let / const : ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ (๋ชจ๋ ์ฝ๋ ๋ธ๋ก ๋ด์์ ์ค์ฝํ ์๋)
๋ณ์ ๊ฐ์ ์ฐพ์๋๋ ํจ์๋ฅผ ์ด๋์ ํธ์ถํ๋์ง(๋์ ์ค์ฝํ)์ ์ํฅ์ ๋ฐ์ง์๊ณ ํจ์๋ฅผ ์ด๋์ ์ ์ํ๋์ง(์ ์ ์ค์ฝํ)์ ์ํฅ์ ๋ฐ๋๋ค.
var x = 1;
function foo(){
var x = 10;
bar();
}
function bar(){
console.log(x);
}
foo() //1
bar() //1
var x = 1
์์ ์ ์ ํ์ผ๋ฏ๋ก ํด๋น ๋ถ๋ถ์์์ ์ฝ์ ์ถ๋ ฅ์ธ 1์ด ์ถ๋ ฅ๋๋ค. var : ๋ณ์์ ์ธ
1) ์ ์ธ๋จ๊ณ : ๋ฐํ์ ์ด์
2) ์ด๊ธฐํ๋จ๊ณ : ๋ฐํ์ ์ด์
let / const : ๋ณ์์ ์ธ
1) ์ ์ธ๋จ๊ณ : ๋ฐํ์ ์ด์
2) ์ด๊ธฐํ๋จ๊ณ : ๋ณ์์ ์ธ๋ฌธ์ ๋๋ฌํ์๋ ์คํ
- ์ ์ธ๋จ๊ณ์ ์ด๊ธฐํ ๋จ๊ณ ์ด์ ์ ์ ๊ทผํ ๊ฒฝ์ฐ TDZ์ ์ํด ์ค๋ฅ ๋ฐ์
- ์ ์ญ ์ฝ๋
- ํจ์ ์ฝ๋
- eval ์ฝ๋
- ๋ชจ๋ ์ฝ๋
- ์์ค์ฝ๋ ํ๊ฐ๊ณผ์ (๋ฐํ์ ์ด์ )
- ์์ค์ฝ๋ ์คํ๊ณผ์ (๋ฐํ์)
- ์์ค์ฝ๋์ ์ข ๋ฅ์์ ๊ฐ๊ฐ ํด๋น ๊ณผ์ ์ด ๋ฐ์ํ๋ค.
์ ์ญ์ฝ๋ ํ๊ฐ : ์ ์ธ๋ฌธ๋ง ๋จผ์ ์คํ
ํด๋น ๋ด์ฉ์ ๊ธ์ด์ด๊ฐ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง๋ ๊ฒ์ด๋ผ ์ค๋ฅ๊ฐ ์์ ์ ์๋ค.
console.log(x)
let x;
- ํธ์ด์คํ ๋ฐ์
- let์ด ํธ์ด์คํ ๋ ์ ์ธ๋ฌธ๋ง ์คํ๋๋ค.
- ๋ณ์์ ์ธ์ ์ ์ธ ๋จ๊ณ๊ฐ ์คํ๋๋ค. (์ด๊ธฐํ X)
let x; // ํธ์ด์คํ
๋ ๋ถ๋ถ ์ ์ธ๋ฌธ (์ ์ธ ๋จ๊ณ)
console.log(x) //x์ TDZ
let x; // ์ค์ ์ด๊ธฐํ ์งํ๋๋ ๋ถ๋ถ (์ด๊ธฐํ ๋จ๊ณ)
- ์ ์ธ ์ดํ์ ๋ชจ๋ ์ฝ๋๋ฅผ ์์ฐจ์ ์ผ๋ก ๋์์ํจ๋ค.
console.log(x)
๋ฅผ ํ๋ ค๋๋ฐ x๋ฅผ ์ด๊ธฐํ ํ์ง์์ referenceError ๋ฐ์
console.log(x) //ReferenceError x๊ฐ ์ ์ธ๋จ๊ณ๋ง ์งํ๋๊ณ ์ด๊ธฐํ๊ฐ ์งํx
let x //x๊ฐ ์ด๊ธฐํ ๋จ๊ณ์งํ
์ ์ญ์ฝ๋ ํ๊ฐ๊ณผ์ (์์ค์ฝ๋ ํ๊ฐ๊ณผ์ )์์ ์ ์ธ๋ฌธ๋ง ๋จผ์ ์คํ๋๋ค๋ผ๊ณ ํ๋๋ฐ ์ด๋ ์ ์ธ๋ฌธ์ ํธ์ด์คํ ๋ ์ ์ธ๋ฌธ์ด๊ณ ์ ์ธ๋จ๊ณ๊ฐ ์คํ๋๋๋ฐ
์ค์ ๊ธฐ์กด์ ์กด์ฌํ๋ ์ ์ธ๋ฌธ ๋ถ๋ถ์ด ์คํ๋๋ ์ ์ญ์ฝ๋ ์คํ๊ณผ์ ๋ถ๋ถ์์ ์ด๋๊ฐ ์ด๊ธฐํ๋จ๊ณ๊ฐ ๋ฐ์ํ๋ค!!!
๊ทธ๋ฌ๋ ๊ทธ์ ์ ํด๋น ๋ณ์๊ฐ์ ์ฐธ๊ณ ํ๋ ค ํ ๊ฒฝ์ฐ ์ด๊ธฐํ๊ฐ ์๋์ด ์ค๋ฅ๊ฐ ๋๋ค.
์์ ์ด ์ํ ๊ฐ์ฒด
์์ ์ด ์์ฑํ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ์๊ธฐ ์ฐธ์กฐ ๋ณ์
๋ณ์
ํจ์์ ์์์ค์ฝํ ์์น ๊ฒฐ์ ํ๊ธฐ : ์ ์๋๋ ๋ฐฉ์์ ๋ฐ๋ผ
(์ ์ ์ค์ฝํ)
this
this์ ๋์ ๊ฒฐ์ ํ๊ธฐ : ํธ์ถ๋๋ ๋ฐฉ์์ ๋ฐ๋ผ
(๋์ ์ผ๋ก ๊ฒฐ์ )
- ์ผ๋ฐ ํจ์ ํธ์ถ
- ๋ฉ์๋ ํธ์ถ
- ์์ฑ์ ํจ์ ํธ์ถ
- Function.prototype.apply/call/bind ๋ฉ์๋์ ์ํ ๊ฐ์ ํธ์ถ
์ผ๋ฐํจ์ : ํจ์ ๋ด๋ถ์ this์๋ ์ฉ์ญ ๊ฐ์ฒด๊ฐ ๋ฐ์ธ๋ฉ
(์ฝ๋ฐฑํจ์ ๋ฐ ์ค์ฒฉํจ์๋ ๋ง์ฐฌ๊ฐ์ง)
๋ฉ์๋ : ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด
์์ฑ์ ํจ์ ํธ์ถ : ์์ฑ์ ํจ์๊ฐ (๋ฏธ๋์) ์์ฑํ ์ธ์คํด์ค
ES6 ์ฌ์์์๋ ๋ฉ์๋๋ ๋ฉ์๋ ์ถ์ฝ ํํ์ผ๋ก ์ ์๋ ํจ์๋ง์ ์๋ฏธํ๋ค.
์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋ non-constructor์ด์ด์ผ ๋ฉ์๋์ด๋ค.
const obj = {
a : 1,
f(){return this.a;}, //(์ถ์ฝํํ) ๋ฉ์๋
bar : function(){return this.a;} //๋ฉ์๋๊ฐ ์๋ ์ผ๋ฐ ํจ์
}
์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋ non-constructor์ด๋ค.
ํ์ดํํจ์๋ ์์ฒด๋ก this,arguments,super,new.target ๋ฐ์ธ๋ฉ์ ๊ฐ์ง์๋๋ค.
=> ์ค์ฝํ์ฒด์ธ์ ํตํด ์์์ค์ฝํ๋ฅผ ์ฐธ์กฐํ๋ค.
=> ํ์ดํํจ์๊ฐ ์ค์ฒฉ๋๋ค๋ฉด ๊ฐ์ฅ๊ฐ๊น์ด ์์ํจ์์ค์์ ํ์ดํํจ์๊ฐ ์๋ ๋์์ ์ฐธ์กฐ
๋ฉ์๋๋ฅผ ํ์ดํํจ์๋ก ์ ์ํ๋ ๊ฒ์ ํผํด์ผํ๋ค.
=> ์์ ์ค์ฝํ์ธ ์ ์ญ์ this๊ฐ ๊ฐ๋ฆฌํค๋ ์ ์ญ ๊ฐ์ฒด๋ฅผ ๋ํ๋ด๋ฏ๋ก
๋ฉ์๋ ์ ์๋ ๋ฉ์๋ ์ถ์ฝ ํํ์ ์ถ์ฒ