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.
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); }[ true, 2 ] [ undefined, 1 ] [ 7, 1 ] TypeError
In a function with default, rest or destructured parameters the directive itself is a SyntaxError; use a module.