# Disallow Use of caller/callee (no-caller) The use of `arguments.caller` and `arguments.callee` make several code optimizations impossible. They have been deprecated in future versions of JavaScript and their use is forbidden in ECMAScript 5 while in strict mode. ```js function foo() { var callee = arguments.callee; } ``` ## Rule Details This rule is aimed at discouraging the use of deprecated and sub-optimal code by disallowing the use of `arguments.caller` and `arguments.callee`. As such, it will warn when `arguments.caller` and `arguments.callee` are used. Examples of **incorrect** code for this rule: ```js /*eslint no-caller: "error"*/ function foo(n) { if (n <= 0) { return; } arguments.callee(n - 1); } [1,2,3,4,5].map(function(n) { return !(n > 1) ? 1 : arguments.callee(n - 1) * n; }); ``` Examples of **correct** code for this rule: ```js /*eslint no-caller: "error"*/ function foo(n) { if (n <= 0) { return; } foo(n - 1); } [1,2,3,4,5].map(function factorial(n) { return !(n > 1) ? 1 : factorial(n - 1) * n; }); ```