๐ค ํ์ดํ ํจ์
- ES6์์ ์๋ก ์ถ๊ฐ๋์๋ค.
- ํจ์ ํํ์์ ๋นํด ์งง์ ๋ฌธ๋ฒ์ ๊ฐ์ง๊ณ ์๋ค.
- ์ฌ์ ์ ์ผ๋ก this ๊ฐ์ ๋ฌถ๋๋ค.
- ์ต๋ช ํจ์๋ก, ์ด๋ฆ์ด ์๋ ํจ์, ์ฆ์ ์คํ์ด ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ํจ์์ด๋ค.
์ผ๋ฐํจ์, ํ์ดํ ํจ์์ ๋น๊ต
function fun() { // ์ผ๋ฐํจ์
...
}
const arrFun = () => { // ํ์ดํ ํจ์
...
};
ํ์ดํ ํจ์ ์ฌ์ฉ ์์
var a = [
"Hydrogen",
"Helium",
"Lithium",
"Beryllium"
];
var a2 = a.map(function(s){ return s.length });
console.log(a2); // logs [8, 6, 7, 9]
// ํ์ดํ ํจ์ ์ฌ์ฉ
var a3 = a.map( s => s.length );
console.log(a3); // logs [8, 6, 7, 9]
//์ถ์ฒ
//https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Functions#%ED%99%94%EC%82%B4%ED%91%9C_%ED%95%A8%EC%88%98
โ ํ์ดํ ํจ์์ ์ผ๋ฐ ํจ์์ ์ฐจ์ด
๋ฐ์ธ๋ฉ์ ์ฐจ์ด๊ฐ ์๋ค.
NOTE!
๋ฐ์ธ๋ฉ์ด๋?
- ํจ์ ํธ์ถ๊ณผ ์ค์ ํจ์๋ฅผ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ.
- ํจ์๋ฅผ ํธ์ถํ๋ ๋ถ๋ถ์์ ์ค์ ํจ์๊ฐ ์์นํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒ.
- ๋ฐ์ธ๋ฉ์ ์ ์ ๋ฐ์ธ๋ฉ ( static binding )๊ณผ ๋์ ๋ฐ์ธ๋ฉ ( dynamic binding )์ผ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
์ ์ ๋ฐ์ธ๋ฉ ( static binding ) | ์คํ ์๊ฐ ์ ์ ์ผ์ด๋จ. ์คํ ์๊ฐ์๋ ๋ณํ์ง ์๋ ์ํ๋ก ์ ์ง. |
๋์ ๋ฐ์ธ๋ฉ ( dynamic binding ) | ์คํ ์๊ฐ์ ์ผ์ด๋๊ฑฐ๋ ์คํ ์๊ฐ์ ๋ณ๊ฒฝ๋จ |
โ ์ฌ์ ์ this
ํ์ดํ ํจ์ ์ด์ ๊น์ง ๋ชจ๋ ํจ์๋ ๊ณ ์ ํ this ๊ฐ์ ์ ์ํ๋ค.
์ด๋ฐ ๋ฐฉ์์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์คํ์ผ๊ณผ ๋ง์ง ์๋๋ค.
function Person() {
// `Person()` ์์ฑ์๋ `this`๋ฅผ ์์ ์ผ๋ก ์ ์ํฉ๋๋ค.
this.age = 0;
setInterval(function growUp() {
// ๋์จํ ๋ชจ๋์์ `growUp()` ํจ์๋ `this`๋ฅผ ์ ์ญ ๊ฐ์ฒด๋ก ์ ์ํฉ๋๋ค.
// ์ด๋ `Person()` ์์ฑ์์ ์ํด ์ ์๋ `this`์ ๋ค๋ฆ
๋๋ค.
this.age++;
}, 1000);
}
var p = new Person();
//์ถ์ฒ
//https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Functions#%ED%99%94%EC%82%B4%ED%91%9C_%ED%95%A8%EC%88%98
ECMAScript 3/5์์ ์ด ๋ฌธ์ ๋ this ์์ ๊ฐ์ ๋ค๋ฎ์ ์ ์๋ ๋ณ์์ ํ ๋นํ๋ฉด์ ํด๊ฒฐํ๋ค.
function Person() {
var self = this; // `self` ๋์ `that`์ ์ ํํ๋ ์ฌ๋๋ ์์ต๋๋ค.
// ์ด๋ ํ ์ชฝ๋ง ์ ํํ๊ณ ๊ทธ๊ฒ๋ง ์ฌ์ฉํ๋๋ก ํ์ฃ .
self.age = 0;
setInterval(function growUp() {
// ์ฝ๋ฐฑ์ ๊ธฐ๋ํ๋ ๊ฐ์ฒด์ `self` ๋ณ์๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
self.age++;
}, 1000);
}
//์ถ์ฒ
//https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Functions#%ED%99%94%EC%82%B4%ED%91%9C_%ED%95%A8%EC%88%98
โ ํ์ดํ ํจ์๋ ์ด๊ฒ์ด ๋ค๋ฅด๋ค
- ํ์ดํ ํจ์์๋ this ๊ฐ ์๋ค. ํ์ดํ ํจ์๋ฅผ ํฌํจํ๋ ๊ฐ์ฒด ๊ฐ์ด ์ฌ์ฉ๋๋ค.
์๋ ์ฝ๋์์ setInterval ์ ์ ๋ฌ๋ ํจ์ ๋ด์ this ๊ฐ์ ํ์ดํ ํจ์๋ฅผ ๋๋ฌ์ผ ํจ์์ this ์ ๊ฐ์ ๊ฐ์ ๊ฐ๋๋ค.
function Person() {
this.age = 0;
setInterval(() => {
// `this`๋ person ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
this.age++;
}, 1000);
}
var p = new Person();
//์ถ์ฒ
//https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Functions#%ED%99%94%EC%82%B4%ED%91%9C_%ED%95%A8%EC%88%98
โ 1. this
์ผ๋ฐ ํจ์
์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ชจ๋ ํจ์๋ ์คํ๋ ๋๋ง๋ค ํจ์ ๋ด๋ถ์ this๋ผ๋ ๊ฐ์ฒด๊ฐ ์ถ๊ฐ๋๋ค.
- ์ผ๋ฐ ํจ์์์ this๊ฐ ๋ฐ์ธ๋ฉ ๋๋ ์ํฉ - |
1. ํจ์ ์คํ ์์๋, ์ ์ญ (window) ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค. |
2. ๋ฉ์๋ ์คํ ์์๋ ๋ฉ์๋๋ฅผ ์์ ํ๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค. |
3. ์์ฑ์ ์คํ ์์๋ ์๋กญ๊ฒ ๋ง๋ค์ด์ง ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค. |
์ผ๋ฐ ํจ์๋ ํจ์๋ฅผ ์ ์ธํ ๋ this์ ๋ฐ์ธ๋ฉํ ๊ฐ์ฒด๊ฐ ์ ์ ์ผ๋ก ๊ฒฐ์ ๋๋ ๊ฒ์ด ์๋๊ณ , ํจ์๊ฐ ์ด๋ป๊ฒ ํธ์ถ๋์๋์ง์ ๋ฐ๋ผ this์ ๋ฐ์ธ๋ฉํ ๊ฐ์ฒด๊ฐ ๋์ ์ผ๋ก ๊ฒฐ์ ๋๋ค.
ํ์ดํ ํจ์
ํ์ดํ ํจ์๋ ์ ์ธํ ๋ this์ ๋ฐ์ธ๋ฉํ ๊ฐ์ฒด๊ฐ ์ ์ ์ผ๋ก ๊ฒฐ์ ๋๋ค.
ํ์ดํ ํจ์์ this๋ ์ธ์ ๋ ์์ ์ค์ฝํ์ this๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
call, apply, bind ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ this๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
function fun() {
this.name = "ํ์ด";
return {
name: "๋ฐ์ด",
speak: function () {
console.log(this.name);
},
};
}
function arrFun() {
this.name = "ํ์ด";
return {
name: "๋ฐ์ด";
speak: () => {
console.log(this.name);
},
};
}
const fun1 = new fun();
fun1.speak(); // ๋ฐ์ด
const fun2 = new arrFun();
fun2.speak(); // ํ์ด
//์ฝ๋ ์ถ์ฒ
//https://velog.io/@yjh8806/%ED%99%94%EC%82%B4%ED%91%9C-%ED%95%A8%EC%88%98%EC%99%80-%EC%9D%BC%EB%B0%98-%ED%95%A8%EC%88%98%EC%9D%98-%EC%B0%A8%EC%9D%B4
์ผ๋ฐ ํจ์๋ก ์ฌ์ฉํ์ ๊ฒฝ์ฐ. | ๋ฐ์ด๊ฐ ์ถ๋ ฅ. ์์ ์ด ์ข ์๋ ๊ฐ์ฒด๋ฅผ this๋ก ๊ฐ๋ฆฌํด. |
ํ์ดํ ํจ์๋ก ์ฌ์ฉํ์ ๊ฒฝ์ฐ. | ํ์ด๊ฐ ์ถ๋ ฅ. ์์ ์ด ์ข ์๋ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํด. |
โ 2. ์์ฑ์ ํจ์๋ก ์ฌ์ฉ ๊ฐ๋ฅ ์ฌ๋ถ
์ผ๋ฐ ํจ์
- ์์ฑ์ ํจ์๋ก ์ฌ์ฉํ ์ ์๋ค.
ํ์ดํ ํจ์
- ์์ฑ์ ํจ์๋ก ์ฌ์ฉํ ์ ์๋ค.
- prototype ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
function fun() {
this.num = 1234;
}
const arrFun = () => {
this.num = 1234;
};
const funA = new fun();
console.log(funA.num); // 1234
const funB = new arrFun(); // Error
//์ฝ๋ ์ถ์ฒ
//https://velog.io/@yjh8806/%ED%99%94%EC%82%B4%ED%91%9C-%ED%95%A8%EC%88%98%EC%99%80-%EC%9D%BC%EB%B0%98-%ED%95%A8%EC%88%98%EC%9D%98-%EC%B0%A8%EC%9D%B4
โ 3. arguments ์ฌ์ฉ ๊ฐ๋ฅ ์ฌ๋ถ
์ผ๋ฐ ํจ์
- ํจ์๊ฐ ์คํ๋ ๋ ์๋ฌต์ ์ผ๋ก arguments ๋ณ์๊ฐ ์ ๋ฌ๋์ด ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
ํ์ดํ ํจ์
- arguments ๋ณ์๊ฐ ์ ๋ฌ๋์ง ์๋๋ค.
//์ผ๋ฐ ํจ์
function fun() {
console.log(arguments); // Arguments(3) [[1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
}
fun(1, 2, 3);
//ํ์ดํ ํจ์
const arrFun = () => {
console.log(arguments); // Uncaught ReferenceError: arguments is not defined
};
fun(1, 2, 3);
//์ฝ๋ ์ถ์ฒ
//https://velog.io/@yjh8806/%ED%99%94%EC%82%B4%ED%91%9C-%ED%95%A8%EC%88%98%EC%99%80-%EC%9D%BC%EB%B0%98-%ED%95%A8%EC%88%98%EC%9D%98-%EC%B0%A8%EC%9D%B4
์ผ๋ฐ ํจ์๋ก ์ฌ์ฉํ์ ๊ฒฝ์ฐ. | arguments ๋ณ์๊ฐ ์ ๋ฌ๋์ด [1,2,3]์ด ์ฐํ๋ค. |
ํ์ดํ ํจ์๋ก ์ฌ์ฉํ์ ๊ฒฝ์ฐ. | arguments๋ฅผ ์ ์ํ ์ ์๋ค๊ณ ์๋ฌ๊ฐ ๋ฌ๋ค. |
- ํ์ดํ ํจ์
https://developer.mozilla.org/
ํจ์ - JavaScript | MDN
ํจ์๋ JavaScript์์ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์ ์ค ํ๋์ ๋๋ค. JavaScript์ ํจ์๋ ์์ ์ ์ํํ๊ฑฐ๋ ๊ฐ์ ๊ณ์ฐํ๋ ๋ช ๋ น๋ฌธ์ ์งํฉ์ธ ํ๋ก์์ (procedure)์ ๋น์ทํ์ง๋ง, ํ๋ก์์ ๊ฐ ํจ์๋ก ์ฐ์ด๋ ค๋ฉด ์ ๋ ฅ์
developer.mozilla.org
ํ์ดํ ํจ์์ ์ผ๋ฐ ํจ์์ ์ฐจ์ด
ํ์ดํ ํจ์๋ ES6์์ ์๋ก ์ถ๊ฐ๋ ์ ์ฉ์ด๋ค. ๊ธฐ์กด ํจ์ ํํ์๊ณผ ๋น๊ตํ๋ฉด ๊ฐ๋จํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.โ๏ธ์ผ๋ฐ ํจ์์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ชจ๋ ํจ์๋ ์คํ๋ ๋๋ง๋ค ํจ์ ๋ด๋ถ์ this๋ผ๋ ๊ฐ์ฒด๊ฐ ์ถ
velog.io