Description

Strict mode makes several changes to normal JavaScript semantics:

  • Eliminates some JavaScript silent errors by changing them to throw errors.
  • Fixes mistakes that make it difficult for JavaScript engines to perform optimizations: strict mode code can sometimes be made to run faster than identical code that’s not strict mode.
  • Prohibits some syntax likely to be defined in future versions of ECMAScript.
function canYouSpotTheProblem() {
  "use strict";
  for (counter = 0; counter < 10; counter++) {
    console.log("Happy happy");
  }
}
 
canYouSpotTheProblem();
// → ReferenceError: counter is not defined

In strict mode the `this` binding holds the value `undefined` in functions that are not called as methods:

"use strict";
 
function doSomething() {
    console.log(this)
}