íì´í í¨ì(arrow function)ì ëí´ ë¤ì ë ¼ìí´ë´ ìë¤.
íì´í í¨ìë ë¨ìí í¨ì를 âì§§ê²â ì°ê¸° ìí ì©ëë¡ ì¬ì©ëì§ ììµëë¤. íì´í í¨ìë ëª ê°ì§ ë í¹íê³ ì ì©í 기ë¥ì ì ê³µí©ëë¤.
ìë°ì¤í¬ë¦½í¸ë¥¼ ì¬ì©íë¤ ë³´ë©´ ì ë©ë¦¬ ëë¨ì´ì§ ê³³ìì ì¤íë ìì í¨ì를 ìì±í´ì¼ íë ìí©ì ì주 ë§ëê² ë©ëë¤.
ìì:
arr.forEach(func)âfuncëforEachê° í¸ì¶ë ë ë°°ì´arrì ìì ì 체를 ëìì¼ë¡ ì¤íë©ëë¤.setTimeout(func)âfuncë ë´ì¥ ì¤ì¼ì¤ë¬ì ìí´ ì¤íë©ëë¤.- 기í ë±ë±â¦
ì´ì²ë¼ ìë°ì¤í¬ë¦½í¸ìì í¨ì를 ìì±íê³ ê·¸ í¨ì를 ì´ëê°ì ì ë¬íë ê²ì´ ì주 ìì°ì¤ë½ìµëë¤.
ê·¸ë°ë° ì´ëê°ì í¨ì를 ì ë¬íê² ëë©´ í¨ìì 컨í ì¤í¸ë¥¼ ìì ì ììµëë¤. ì´ë´ ë íì´í í¨ì를 ì¬ì©íë©´ íì¬ ì»¨í ì¤í¸ë¥¼ ìì§ ìì í¸ë¦¬í©ëë¤.
íì´í í¨ììë 'thisâê° ììµëë¤
ë©ìëì this ì±í°ìì íì´í í¨ìì thisê° ìë¤ë ê²ì ë°°ì´ ë° ììµëë¤. íì´í í¨ì 본문ìì thisì ì ê·¼íë©´, ì¸ë¶ìì ê°ì ê°ì ¸ìµëë¤.
ì´ë° í¹ì§ì ê°ì²´ì ë©ìë(showList()) ììì ëì¼ ê°ì²´ì íë¡í¼í°(students)를 ëìì¼ë¡ ìí를 íë ë° ì¬ì©í ì ììµëë¤.
let group = {
title: "1모ë ",
students: ["ë³´ë¼", "í¸ì§", "ì§ë¯¼"],
showList() {
this.students.forEach(
student => alert(this.title + ': ' + student)
);
}
};
group.showList();
ììì forEachìì íì´í í¨ì를 ì¬ì©í기 ë문ì íì´í í¨ì 본문ì ìë this.titleì íì´í í¨ì ë°ê¹¥ì ìë ë©ìëì¸ showListê° ê°ë¦¬í¤ë ëìê³¼ ëì¼í´ì§ëë¤. ì¦ this.titleì group.titleê³¼ ê°ìµëë¤.
ì ìììì íì´í í¨ì ëì âì¼ë°â í¨ì를 ì¬ì©íë¤ë©´ ìë¬ê° ë°ìíì ê²ëë¤.
let group = {
title: "1모ë ",
students: ["ë³´ë¼", "í¸ì§", "ì§ë¯¼"],
showList() {
this.students.forEach(function(student) {
// TypeError: Cannot read property 'title' of undefined
alert(this.title + ': ' + student)
});
}
};
group.showList();
ìë¬ë forEachì ì ë¬ëë í¨ìì thisê° undefined ì´ì´ì ë°ìíìµëë¤. alert í¨ììì undefined.titleì ì ê·¼íë ¤ í기 ë문ì ì¼ë¿ ì°½ì ìë¬ê° ì¶ë ¥ë©ëë¤.
ê·¸ë°ë° íì´í í¨ìë this ìì²´ê° ì기 ë문ì ì´ë° ìë¬ê° ë°ìíì§ ììµëë¤.
newì í¨ê» ì¤íí ì ììµëë¤.thisê° ì기 ë문ì íì´í í¨ìë ìì±ì í¨ìë¡ ì¬ì©í ì ìë¤ë ì ì½ì´ ììµëë¤. íì´í í¨ìë newì í¨ê» í¸ì¶í ì ììµëë¤.
íì´í í¨ìì ì¼ë° í¨ì를 .bind(this)를 ì¬ì©í´ì í¸ì¶íë ê² ì¬ì´ìë 미ë¬í ì°¨ì´ê° ììµëë¤.
.bind(this)ë í¨ìì 'íì ë ë²ì (bound version)'ì ë§ëëë¤.- íì´í í¨ìë ì´ë¤ ê²ë ë°ì¸ë©ìí¤ì§ ììµëë¤. íì´í í¨ìì ë¨ì§
thisê° ìì ë¿ì ëë¤. íì´í í¨ìììthis를 ì¬ì©íë©´ ì¼ë° ë³ì ìì¹ê³¼ ë§ì°¬ê°ì§ë¡thisì ê°ì ì¸ë¶ ë ì컬 íê²½ìì ì°¾ìµëë¤.
íì´í í¨ìì 'argumentsâê° ììµëë¤
íì´í í¨ìë ì¼ë° í¨ììë ë¤ë¥´ê² 모ë ì¸ìì ì ê·¼í ì ìê² í´ì£¼ë ì ì¬ ë°°ì´ ê°ì²´ arguments를 ì§ìíì§ ììµëë¤.
ì´ë° í¹ì§ì íì¬ this ê°ê³¼ arguments ì 보를 í¨ê» ì¤ì´ í¸ì¶ì í¬ìë©í´ 주ë ë°ì½ë ì´í°ë¥¼ ë§ë¤ ë ì ì©íê² ì¬ì©ë©ëë¤.
ìë ìììì ë°ì½ë ì´í° defer(f, ms)ë í¨ì를 ì¸ìë¡ ë°ê³ ì´ í¨ì를 ëí¼ë¡ ê°ì¸ ë°ííëë°, í¨ì fë ms ë°ë¦¬ì´ íì í¸ì¶ë©ëë¤.
function defer(f, ms) {
return function() {
setTimeout(() => f.apply(this, arguments), ms)
};
}
function sayHi(who) {
alert('ìë
, ' + who);
}
let sayHiDeferred = defer(sayHi, 2000);
sayHiDeferred("ì² ì"); // 2ì´ í "ìë
, ì² ì"ê° ì¶ë ¥ë©ëë¤.
íì´í í¨ì를 ì¬ì©íì§ ìê³ ëì¼í 기ë¥ì íë ë°ì½ë ì´í° í¨ì를 ë§ë¤ë©´ ë¤ìê³¼ ê°ìµëë¤.
function defer(f, ms) {
return function(...args) {
let ctx = this;
setTimeout(function() {
return f.apply(ctx, args);
}, ms);
};
}
ì¼ë° í¨ììì setTimeoutì ë겨주ë ì½ë°± í¨ììì ì¬ì©í ë³ì ctxì args를 ë°ëì ë§ë¤ì´ì¤ì¼ í©ëë¤.
ìì½
íì´í í¨ìê° ì¼ë° í¨ìì ë¤ë¥¸ ì ì ë¤ìê³¼ ê°ìµëë¤.
this를 ê°ì§ì§ ììµëë¤.arguments를 ì§ìíì§ ììµëë¤.newì í¨ê» í¸ì¶í ì ììµëë¤.- ì´ ì¸ìë íì´í í¨ìë
superê° ìë¤ë í¹ì§ë ìëë°, ìì§superì ëí´ ë°°ì°ì§ ìì기 ë문ì ì´ë² ì±í°ìì í´ë¹ ë´ì©ì ë¤ë£¨ì§ ìììµëë¤. íì´í í¨ììsuperì ê´ê³ë í´ëì¤ ìì ì±í°ìì íìµí ìì ì ëë¤.
íì´í í¨ìë 컨í ì¤í¸ê° ìë 긴 ì½ëë³´ë¤ë ìì²´ '컨í ì¤í¸âê° ìë ì§§ì ì½ë를 ë´ì ì©ëë¡ ë§ë¤ì´ì¡ìµëë¤. ê·¸ë¦¬ê³ ì´ ëª©ì ì ì ë¤ì´ë§ë í¹ì§ì ë³´ì ëë¤.
ëê¸
<code>í그를, ì¬ë¬ ì¤ë¡ 구ì±ë ì½ë를 ì½ì íê³ ì¶ë¤ë©´<pre>í그를 ì´ì©íì¸ì. 10ì¤ ì´ìì ì½ëë plnkr, JSBin, codepen ë±ì ìëë°ì¤ë¥¼ ì¬ì©íì¸ì.