Restrictions on Functions

Inside a strict function this is not replaced by globalThis or boxed into an object, arguments no longer mirrors reassigned parameters, and arguments.callee, f.caller and f.arguments throw. Duplicate parameter names are a SyntaxError, and a function declared in a block is visible only in that block.

The same function body in sloppy and strict modeJavaScriptLive
function sloppy(a) { a = 2; return [this === globalThis, arguments[0]]; }
function strict(a) {
  "use strict";
  a = 2;
  return [this, arguments[0]];
}
console.log(sloppy(1), strict(1), strict.call(7, 1));
try { strict.caller; } catch (e) { console.log(e.name); }

In a function with default, rest or destructured parameters the directive itself is a SyntaxError; use a module.