ES6 ๋ฌธ๋ฒ ์ดํ๋ถํฐ ํ์ดํ ํจ์๊ฐ ๋ฑ์ฅํ๋ค
๊ถ๊ธํ ๊ฒ :
์ JS์์ ํ์ดํ ํจ์ ์ฌ์ฉ์ ๊ถ์ฅํ๋๊ฑธ๊น? ์ ? WHY/ ??
1. ํจ์ํ ๋ณ์
const apple = 1000; // ๋ณ์
const add = (a, b) => a + b; // ํ์ดํ ํจ์
console.log(add(2, 3)); // 5
์ฌ์ฉ์ด ์ง๊ด์ ์ด๋ค.
๋ณ์์ ๋์ผํ๊ฒ ์ ์ธ ํ, ๋ณ์ ์ด๋ฆ์ ํธ์ถํ๋ฉด ํจ์๋ฅผ ์คํ์ํฌ ์ ์๋ค!
2. ๊ฐ๋จํ ์์
์งง์ ์์์ผ ๊ฒฝ์ฐ ๊ดํธ๊ฐ ํ์์๋ค
let func = x => x * 2 ;
3. this๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค. ๐๐๐โผ๏ธ
์ผ๋ฐ ํจ์ ๋ด์์๋ this๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋, ํ์ดํ ํจ์์๋ ํด๋น ๋ฌธ๋ฒ์ด ์ ์ฉ๋์ง ์์.
๊ทผ๋ฐ ์ด๊ฒ ์ฅ์ ์ด ๋๋ค.
ํ์ดํ ํจ์ ๋ด์์ this๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์์์ ์๋ ๊ทธ๊ฒ์ ๋ถ๋ฌ์จ๋ค.
(1) ์ผ๋ฐ ํจ์์ ๊ฒฝ์ฐ : this๊ฐ ๋์ ์ผ๋ก ๋ฐ๋์ด ๋ฌธ์ ๊ฐ ์๊น
์ด๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด .bind(this) ๋๋ self = this ๊ฐ์ ๋ณ๋ ์ฒ๋ฆฌ๊ฐ ํ์ํจ
function Person() {
this.age = 0;
setInterval(function () {
this.age++; // ์ฌ๊ธฐ์ this๋ ์ ์ญ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํด (Node.js์์๋ global, ๋ธ๋ผ์ฐ์ ์์๋ window)
console.log(this.age);
}, 1000);
}
new Person(); // NaN
bind๋ฅผ ์ฌ์ฉํ์ฌ this๋ฅผ ๊ณ ์ ์ํค๋ฉด :
setTimeout(function () {
this.count++;
console.log(this.count);
}.bind(this), 1000); // this๋ฅผ Counter๋ก ๊ณ ์
(2) ํ์ดํ ํจ์์ ๊ฒฝ์ฐ : this์ ์์ธก ๊ฐ๋ฅ์ฑ Up
function Person() {
this.age = 0;
setInterval(() => {
this.age++; // ํ์ดํ ํจ์๋ ์์ ์ค์ฝํ์ this๋ฅผ ์ฌ์ฉ
console.log(this.age);
}, 1000);
}
new Person(); // 1, 2, 3, ...
๋ํ, ์ฝ๋ฐฑ ํจ์์์ bind ์์ด ์ ๋์ํจ
์์ ์ค์ฝํ์์ this๋ฅผ ์๋์ผ๋ก ๊ฐ์ ธ์ค๋ฏ๋ก,
๋ณต์กํ ์ปจํ ์คํธ ์ ํ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ณ ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ณ ์ง๊ด์ ์ผ๋ก ์์ฑํ ์ ์๊ฒ ํด์ค
๋๋ ์ :
๋ค๋ค ๊ถ์ฅํ๋ ๊ฒ์๋ ๊ทธ ์ด์ ๊ฐ ์๋ค~
๋ง์ฐํ๊ฒ ์ด๋ ๊ฒ ์๊ฐํ์๋๋ฐ, ์ค์ ๋ก ๊ทธ ์ด์ ๋ฅผ ์์ธํ ํํค์ณ๋ณด๋
์ฅ์ ์ ๋ช ํํ ์ ์ ์์ด์ ์ข์๋ค ใ .ใ