์๋ฐ์คํฌ๋ฆฝํธ - callback ํจ์
(์ฐธ๊ณ ์๋ฃ: ์ธํ๋ฐ ๊ฐ์ - ์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ(callback ํจ์)
callback function: ํ์ ํ๋ ํจ์
์ ์ด๊ถ ์์ํ๋ ๊ฒฝ์ฐ:
1. ์คํ ์์
2. ๋งค๊ฐ ๋ณ์
3. this
1. ์คํ ์์
์์ ํจ์)
setInterval(callback, milliseconds)
var cd= function(){
console.log('1์ด ๋ง๋ค ์คํ๋ ๊ฒ๋๋ค')
};
setInterval(cd, 1000);
์ด๋ฌ๋ฉด setInterval์ด ์์์ callback ํจ์๋ฅผ ์คํ์์ผ์ค -> ์ ์ด๊ถ์ setInterval์๊ฒ ์์ํด์ฃผ๋ ๊ฒ
2. ๋งค๊ฐ๋ณ์ (์๋ฅผ๋ค์ด, forEach)
var arr = [1,2,3,4,5];
var entries = [];
arr.forEach(function(v, i){
entries.push([i, v, this[i]]);
},[10,20,30,40,50]);
console.log(entries);
v๋ arr์ ์๋ ๊ฐ ์์๋ฅผ ํ๋์ฉ ๊บผ๋ด์ 1,2,3,4,5์ ๊ฐ ์ถ๋ ฅ
i๋ ์ธ๋ฑ์ค
this[i]๋ 10,20,30,40,50 ์ด๊ฑฐ๋ ๋๋ฒ์งธ ์ธ์๋ค์ ๊ฐ
์ฆ, forEach๋ ์ธ์1(์ฝ๋ฐฑํจ์), ์ธ์2(this๋ฅผ ์ธ์ํ ๋์)
forEach(๋งค๊ฐ๋ณ์)๊ฐ ์ ์๋ ๊ท์น์ ๋ฐ๋ผ์ผ๋ง ํจ
3. this
this์๋ currenTarget์ด ๋ฐ์ธ๋ฉ๋๋ค.
document.body.innerHTML = '<div id="a">abc</div>';
function cbFunc(x){
console.log(this, x);
}
document.getElementById('a').addEventListener('click',cbFunc);
// addEventListener(type, callback, option);
addEventListner์ cbFunc์์ ์๋ this๋ id๊ฐ a์ธ div element๋ก ์๋์ผ๋ก ์ง์ . -> event ๊ฐ์ฒด๋ก ์๋ ์ง์ ๋๋ ํจ์
๊ทธ๋ ๋ค๋ฉด this๋ฅผ obj๋ก ๋ฐ๊ฟ ์ ์์๊น?
๊ทธ๋ ๋ค๋ฉด, bind ํจ์๋ฅผ ์ฐ์ !
document.getElementById('a').addEventListener('click',cbFunc.bind(obj));
์ฝ๋ฐฑํจ์์ ํน์ง:
1. ๋ค๋ฅธ ํจ์์ ์ธ์๋ก ์ฝ๋ฐฑํจ์๊ฐ ๋ค์ด์จ๋ค๋ฉด, ๋ค๋ฅธ ํจ์๊ฐ ์ฝ๋ฐฑํจ์์ ์ ์ด๊ถ์ ๊ฐ๋๋ค.
2. ๊ฐํน ๋ค๋ฅธ ํจ์์ ๊ท์น์ ๋ฐ๋ผ ์ฝ๋ฐฑํจ์๋ฅผ ํธ์ถํ ์๋ ์๋ค.
3. ๋ฏธ๋ฆฌ ์ ํด๋์ ๋ฐฉ์์ด๋ผ๋ฉด, ์ด๋ค ์์ ์์ ์ฝ๋ฐฑ์ ํธ์ถํ ์ง, ์ธ์๋ ์ด๋ค ๊ฐ๋ค์ ์ง์ ํ ์ง, this์ ๋ฌด์์ ๋ฐ์ธ๋ฉํ ์ง ๋ฑ
์ฃผ์! ์ฝ๋ฐฑ์ ํจ์๋ค !
var arr=[1,2,3,4,5];
var obj = {
vals: [1,2,3],
logValues: function(v, i){
if(this.vals){
console.log(this.vals,v,i); //์ด ์ถ๋ ฅ ๊ฐ์ด ๋์ด
} else{
console.log(this, v, i);
}
}
};
obj.logValues(1,2);
//๊ฒฐ๊ณผ
[ 1, 2, 3 ] 1 2
//but
arr.forEach(obj.logValues);
obj.logValues๋ก ํธ์ถํ๋ฉด ๋ฉ์๋๋ก์ ํธ์ถ. ์๋๋ฉด ์์ ์ ์ด ์์ผ๋๊น. ์ด๋์ this๋ obj
ํ์ง๋ง, //but ๋ค์ ์ฝ๋๋ฅผ ๋ณด๋ฉด, forEach๋๋ฌธ์ ํธ์ถ์ ํ์ง์์. ํธ์ถ์ forEach๊ฐ ํ ๊ฒ์
forEach๊ฐ ๊ถํ์ด ์๊ธฐ ๋๋ฌธ์ forEach๊ฐ ์ด๋ป๊ฒ ํธ์ถํ๋์ ๋ฐ๋ผ this๊ฐ ๋ฌ๋ผ์ง
๊ทธ๋์, obj.logValues๋ ์ฝ๋ฐฑํจ์๋ก ์ ๋ฌ์ด ๋จ. ๋ฉ์๋๋ก์ ํธ์ถํ ๊ฒ์ด ์๋
๊ทธ๋์ obj.logValues๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ํจ์๋ง ๋ผ์ด์ ์ ๋ฌ. ํจ์๋ก์จ ์ ๋ฌ.
๊ทธ๋์ this๋ ์ ์ญ๊ฐ์ฒด๊ฐ ๋์ด๋ฒ๋ฆผ