ReferenceError: deprecated caller or arguments usage
Message
TypeError: 'arguments', 'callee' and 'caller' are restricted function properties and cannot be accessed in this context (Edge) Warning: ReferenceError: deprecated caller usage (Firefox) Warning: ReferenceError: deprecated arguments usage (Firefox) TypeError: 'callee' and 'caller' cannot be accessed in strict mode. (Safari)
Type d'erreur
Un avertissement uniquement affiché en mode strict qui prend la forme d'une ReferenceError
. L'exécution du script JavaScript n'est pas interrompue.
Quel est le problème ?
En mode strict, les propriétés Function.caller
et/ou Function.arguments
sont utilisées alors qu'elles ne devraient pas l'être. Ces propriétés sont dépréciées car elles font fuiter des informations sur l'appelant de la fonction et ne sont pas standards. De plus, ces propriétés rendent certaines optimisations plus complexe et peuvent nuire aux performances.
Exemples
Utilisation de function.caller
ou de arguments.callee.caller
Function.caller
et arguments.callee.caller
sont dépréciées (se référer aux articles de la référence pour plus d'informations).
"use strict";
function myFunc() {
if (myFunc.caller == null) {
return "La fonction a été appelée depuis la portée globale !";
} else {
return "L'appelant est " + myFunc.caller;
}
}
myFunc();
// Warning: ReferenceError: deprecated caller usage
// "La fonction a été appelée depuis la portée globale !"
Function.arguments
Function.arguments
est dépréciée (se référer à l'article sur cette propriété pour plus d'informations).
"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);
// Warning: ReferenceError: deprecated arguments usage