Ðе ÑÑандаÑÑно: ÐÑа ÑÑнкÑÐ¸Ñ Ð½Ðµ ÑÑандаÑÑизиÑована. ÐÑ Ð½Ðµ ÑекомендÑем иÑполÑзоваÑÑ Ð½ÐµÑÑандаÑÑнÑе ÑÑнкÑии в дейÑÑвÑÑÑÐ¸Ñ Ð¿ÑоекÑÐ°Ñ , Ñак как Ð¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑжка бÑаÑзеÑами огÑаниÑена, а поведение Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑÑÑ Ð¸Ð»Ð¸ бÑÑÑ Ñдалено. Тем не менее, в некоÑоÑÑÑ ÑлÑÑаÑÑ , когда Ð½ÐµÑ ÑÑандаÑÑного ÑеÑениÑ, они могÑÑ Ð±ÑÑÑ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑей алÑÑеÑнаÑивой.
СводкаСвойÑÑво function.caller
возвÑаÑÐ°ÐµÑ ÑÑнкÑиÑ, коÑоÑÐ°Ñ Ð²Ñзвала ÑказаннÑÑ ÑÑнкÑиÑ.
ÐÑли ÑÑнкÑÐ¸Ñ f
бÑла вÑзвана из кода Ñамого веÑÑ
него ÑÑовнÑ, знаÑение f.caller
бÑÐ´ÐµÑ Ñавно null
, в пÑоÑивном ÑлÑÑае знаÑение бÑÐ´ÐµÑ Ñавно ÑÑнкÑии, вÑзвавÑей f
.
ÐÑо ÑвойÑÑво пÑиÑло на Ð·Ð°Ð¼ÐµÐ½Ñ ÑдалÑнного ÑвойÑÑва arguments.caller
обÑекÑа arguments
.
СпеÑиалÑное ÑвойÑÑво __caller__
, возвÑаÑаÑÑее обÑÐµÐºÑ Ð°ÐºÑиваÑии вÑзÑваÑÑей ÑÑнкÑии и, Ñаким обÑазом, позволÑÑÑее воÑÑÑанавливаÑÑ ÑÑек вÑзовов, бÑло Ñдалено по ÑообÑажениÑм безопаÑноÑÑи.
ÐбÑаÑиÑе внимание, ÑÑо в ÑлÑÑае ÑекÑÑÑии, Ð²Ñ Ð½Ðµ ÑможеÑе воÑÑоздаÑÑ ÑÑек вÑзовов, иÑполÑзÑÑ ÑÑо ÑвойÑÑво. ÐÑÑÑÑ Ñ Ð½Ð°Ñ ÐµÑÑÑ ÑÑнкÑии:
function f(n) {
g(n - 1);
}
function g(n) {
if (n > 0) {
f(n);
} else {
stop();
}
}
f(2);
Ð Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñзова ÑÑнкÑии stop()
, ÑÑек вÑзовов Ð¸Ð¼ÐµÐµÑ ÑледÑÑÑий вид:
f(2) -> g(2) -> f(2) -> g(1) -> f(1) -> g(0) -> stop()
СледÑÑÑее ÑÑловие веÑно:
stop.caller === g && f.caller === g && g.caller === f
Ñак ÑÑо еÑли Ð²Ñ Ð¿Ð¾Ð¿ÑÑаеÑеÑÑ Ð¾ÑÑÑаÑÑиÑоваÑÑ ÑÑек в ÑÑнкÑии stop()
подобнÑм обÑазом:
var f = stop;
var stack = "ТÑаÑÑиÑовка ÑÑека:";
while (f) {
stack += "\n" + f.name;
f = f.caller;
}
Ñо ÑÑÐ¾Ñ Ñикл никогда не оÑÑановиÑÑÑ.
ÐÑимеÑÑ ÐÑимеÑ: пÑовеÑка знаÑÐµÐ½Ð¸Ñ ÑвойÑÑваcaller
ÑÑнкÑии
СледÑÑÑий код пÑовеÑÑÐµÑ Ð·Ð½Ð°Ñение ÑвойÑÑва caller
ÑÑнкÑии.
function myFunc() {
if (myFunc.caller == null) {
return "ÐÑа ÑÑнкÑÐ¸Ñ Ð±Ñла вÑзвана из веÑÑ
него ÑÑовнÑ!";
} else {
return "ÐÑа ÑÑнкÑÐ¸Ñ Ð±Ñла вÑзвана из " + myFunc.caller;
}
}
СпеÑиÑикаÑии
Ðе ÑвлÑеÑÑÑ ÑаÑÑÑÑ ÐºÐ°ÐºÐ¾Ð¹-либо ÑпеÑиÑикаÑии. Реализована в JavaScript 1.5.
СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже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