TypeError: Die Eigenschaften 'caller', 'callee' und 'arguments' können nicht aufgerufen werden
Die ausschließlich im JavaScript-Strict-Modus auftretende Ausnahme
"'caller', 'callee', und 'arguments' Eigenschaften können in Strict-Mode-Funktionen oder den arguments-Objekten für Aufrufe an sie nicht abgefragt werden", tritt auf, wenn die
veralteten Eigenschaften arguments.callee
, Function.prototype.caller
oder Function.prototype.arguments
verwendet werden.
Nachricht
TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them (V8-based & Firefox) TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in this context. (Safari)
Fehlertyp
TypeError
nur im Strict-Modus.
Was ist schiefgelaufen?
Im Strict-Modus werden die Eigenschaften arguments.callee
,
Function.prototype.caller
oder Function.prototype.arguments
verwendet,
obwohl sie es nicht sollten. Sie sind veraltet, da sie den Funktionsaufrufer preisgeben, nicht standardisiert sind, schwer zu optimieren und potenziell eine leistungsschädliche Funktion darstellen können.
Beispiele
Veraltete function.caller oder arguments.callee
Function.prototype.caller
und
arguments.callee
sind veraltet (siehe die Referenzartikel für weitere Informationen).
"use strict";
function myFunc() {
if (myFunc.caller === null) {
return "The function was called from the top!";
} else {
return `This function's caller was ${myFunc.caller}`;
}
}
myFunc();
// TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
Function.prototype.arguments
Function.prototype.arguments
ist veraltet (siehe den Referenzartikel für weitere
Informationen).
"use strict";
function f(n) {
g(n - 1);
}
function g(n) {
console.log(`before: ${g.arguments[0]}`);
if (n > 0) {
f(n);
}
console.log(`after: ${g.arguments[0]}`);
}
f(2);
console.log(`returned: ${g.arguments}`);
// TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them