arguments.callee
ìì±(property)ì íì¬ ì¤í ì¤ì¸ í¨ì를 í¬í¨í©ëë¤.
callee
ë arguments
ê°ì²´ì ìì±ì
ëë¤. ê·¸ í¨ìì 몸íµ(body) ë´ìì íì¬ ì¤í ì¤ì¸ í¨ì를 참조íë ë° ì°ì¼ ì ììµëë¤. ì´ë í¨ìì ì´ë¦ì ì ì ìë ê²½ì°ì ì ì©í©ëë¤, ê°ë ¹ ì´ë¦ ìë í¨ì ì(ëí "ìµëª
í¨ì"ë¼ í¨) ë´ìì.
ê²½ê³ : ECMAScript ì 5í(ES5) ì ì격 모ëìì arguments.callee()
ì ì¬ì©ì ê¸í©ëë¤. function ì(expression)ì ì´ë¦ì 주거ë í¨ì ì체를 í¸ì¶í´ì¼ íë ê³³ì function ì ì¸ì ì¬ì©íì¬ arguments.callee()
ì¬ì©ì í¼íì¸ì.
arguments.callee
ë ì ES5 ì격 모ëìì ì ê±°ëìëì?
(olliejì Stack Overflow ëµë³ìì ê³ ì³ì)
ì´ê¸° ë²ì JavaScriptë ì ëª (named) í¨ì ìì íì©íì§ ììµëë¤. ê·¸ë¦¬ê³ ì´ ë문ì ì¬ê·(recursive) í¨ì ìì ë§ë¤ ì ììµëë¤.
ì를 ë¤ì´, ì´ êµ¬ë¬¸ì ìëë©ëë¤:
function factorial(n) {
return !(n > 1) ? 1 : factorial(n - 1) * n;
}
[1, 2, 3, 4, 5].map(factorial);
íì§ë§ ë¤ìì:
[1, 2, 3, 4, 5].map(function (n) {
return !(n > 1) ? 1 : /* what goes here? */ (n - 1) * n;
});
ìëëë¤. ì´ë¥¼ ì°íí기 ìí´ arguments.callee
ê° ì¶ê°ëìê³ ì´ì ê°ì´ í ì ììµëë¤
[1, 2, 3, 4, 5].map(function (n) {
return !(n > 1) ? 1 : arguments.callee(n - 1) * n;
});
ê·¸ë¬ë, ì´ë ì¤ë¡ ì ë§ ëì í´ê²°ì±
ì´ììµëë¤. ì´ë (ë¤ë¥¸ arguments
, callee
ë° caller
문ì ì í¨ê») ì¼ë°ì ì¸ ê²½ì°ì ì¸ë¼ì¸ ë° tail ì¬ê·ë¥¼ ë¶ê°ë¥ì¼ í기ì (tracing ë±ì íµí´ ì íí ê²½ì°ì ê·¸ê²ì ë¬ì±í ì ìì§ë§ ìµê³ ì ì½ëë ê²ì¬ê° ë¬ë¦¬ íìíì§ ì기ì ì°¨ì ì
ëë¤.) ë¤ë¥¸ 주ì 문ì ë ê·¸ ì¬ê· í¸ì¶ì´ ë¤ë¥¸ this
ê°ì ê°ë ê²ì
ëë¤. ê°ë ¹:
var global = this;
var sillyFunction = function (recursed) {
if (!recursed) {
return arguments.callee(true);
}
if (this !== global) {
alert("This is: " + this);
} else {
alert("This is the global");
}
};
sillyFunction();
ECMAScript 3ì ì ëª (named) í¨ì ìì íì©í´ì ì´ ë¬¸ì 를 í´ê²°íìµëë¤. ì를 ë¤ë©´:
[1, 2, 3, 4, 5].map(function factorial(n) {
return !(n > 1) ? 1 : factorial(n - 1) * n;
});
ì´ë ë§ì ì´ì ì´ ììµëë¤:
ì¬ë¼ì§ê² ëë ë ë¤ë¥¸ 기ë¥ì arguments.callee.caller
ëë ë ëª
ííê² Function.caller
ììµëë¤. ì´ë ìì¼ê¹ì? ì, ì´ë ìì ììë ë¹ì ì 모ë í¨ìì ì¤í ì ê°ì¥ ê¹ì caller를 ì°¾ì ì ìê³ ììì ë§íë¯ì´ í¸ì¶ ì¤í 보기ë í ê°ì§ 주ì í¨ê³¼ê° ììµëë¤: ì´ë í° ìì ìµì í를 ë¶ê°ë¥ ëë í¨ì¬ í¨ì¬ ë ì´ë µê² í©ëë¤. ì를 ë¤ì´, í¨ì f
ê° ìµëª
(unknown) í¨ì를 í¸ì¶íì§ ììì ë³´ì¥í ì ìë ê²½ì°, f
를 ì¸ë¼ì¸íë ê² ê°ë¥íì§ ììµëë¤. ìë ì¬ìíê² ì¸ë¼ì¸ ê°ë¥íì ì§ë 모를 모ë í¸ì¶ ì¬ì´í¸ê° ë¤ìì guard를 ì¶ì í¨ì ë»í©ëë¤:
function f(a, b, c, d, e) {
return a ? b * c : d * e;
}
JavaScript ì¸í°í리í°ê° ì ê³µë 모ë ì¸ìê° í¸ì¶ì´ íí´ì§ ê·¸ ìì ì ì«ììì ë³´ì¥í ì ìë¤ë©´, ì¸ë¼ì¸ë ì½ë ìì 모ë ì¸ìì ëí ê²ì¬ ì½ì ì´ íìí©ëë¤. ê·¸ë ì§ ìì¼ë©´ ê·¸ í¨ì를 ì¸ë¼ì¸í ì ììµëë¤. ì´ì ì´ í¹ì í ê²½ì°ì ì¤ë§í¸ ì¸í°í리í°ë ë ìµì ì´ê³ ì¬ì©ëì§ ìì ê°ì íì¸íì§ ìì ê²ì¬ë¥¼ ì¬ë°°ì´í ì ìì´ì¼ í©ëë¤. ê·¸ë¬ë ë§ì ê²½ì°ì 그건 ê·¸ë¥ ê°ë¥íì§ ìê³ ê·¸ë¬ë¯ë¡ ì¸ë¼ì¸ì ë¶ê°ë¥íê² ë©ëë¤.
ì ìµëª ì¬ê· í¨ìììarguments.callee
ì¬ì©í기
ì¬ê· í¨ìë ìì ì 참조í ì ìì´ì¼ í©ëë¤. ë³´íµ, í¨ìë ê·¸ ì´ë¦ì¼ë¡ ìì ì 참조í©ëë¤. ê·¸ë¬ë, ìµëª
í¨ì(í¨ì ì ëë Function
ìì±ìë¡ ìì±ë ì ìë)ë ì´ë¦ì´ ììµëë¤. ê·¸ë¬ë¯ë¡ 그를 참조íë ì¡ì¸ì¤ ê°ë¥í ë³ìê° ìë ê²½ì°, í¨ìê° ìì ì 참조í ì ìë ì ì¼í ë°©ë²ì arguments.callee
ì ìí´ìì
ëë¤.
ë¤ì ìë ì°¨ë¡ë¡ í©í ë¦¬ì¼ í¨ì를 ì ìíê³ ë°ííë í¨ì를 ì ìí©ëë¤. ì´ ìë ë§¤ì° ì¤ì©ì ì´ì§ ìê³ ê°ì ê²°ê³¼ê° ì ëª í¨ì ìì¼ë¡ ë¬ì±ë ì ìë ê²½ì°ê° ê±°ì ììµëë¤.
function create() {
return function (n) {
if (n <= 1) return 1;
return n * arguments.callee(n - 1);
};
}
var result = create()(5); // ë°íê° 120 (5 * 4 * 3 * 2 * 1)
ì¢ì ëì ìë arguments.callee
ì ì¬ì©
ê·¸ë¬ë, ë¤ìê³¼ ê°ì ê²½ì°ìë arguments.callee
ì ëìì´ ììµëë¤. ê·¸ëì ê·¸ ì¬ë¼ì§(deprecation)ì ë²ê·¸ê° ë ì ììµëë¤ (Firefox bug 725398 참조):
function createPerson(sIdentity) {
var oPerson = new Function("alert(arguments.callee.identity);");
oPerson.identity = sIdentity;
return oPerson;
}
var john = createPerson("John Smith");
john();
ëª
ì¸ ë¸ë¼ì°ì í¸íì± ì°¸ì¡°
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4