Open In App

Strict mode in JavaScript

Strict Mode was a new feature in ECMAScript 5 that allows you to place a program, or a function, in a “strict” operating context. This strict context prevents certain actions from being taken and throws more exceptions. The statement “use strict”; instructs the browser to use the Strict mode, which is a reduced and safer feature set of JavaScript.

Benefits of using ‘use strict’: Strict mode makes several changes to normal JavaScript semantics. 



How to use strict mode: Strict mode can be used in two ways, remember strict mode doesn’t work with block statements enclosed in {} braces. 

Using Strict mode for the entire script: To invoke strict mode for an entire script, put the exact statement “use strict”; (or ‘use strict’;) before any other statements. 



// Whole-script strict mode syntax
'use strict';
 let v = "strict mode script!";

This syntax has a flow, it isn’t possible to blindly concatenate non-conflicting scripts. Consider concatenating a strict mode script with a non-strict mode script. The entire concatenation looks strict, the inverse is also true. The non-strict plus strict looks non-strict. The concatenation of strict mode scripts with each other is fine, and concatenation of non-strict mode scripts is fine. Only concatenating strict and non-strict scripts is problematic. It is thus recommended that you enable strict mode on a function-by-function basis (at least during the transition period).

Using Strict mode for a function: Likewise, to invoke strict mode for a function, put the exact statement “use strict”; (or ‘use strict’;) in the function’s body before any other statements.

function strict() {

  // Function-level strict mode syntax
  'use strict';

  function nested() { return 'Javascript on GeeksforGeeks'; }

  return "strict mode function!  " + nested();
}
function notStrict() { return "non strict function"; }

Examples of using Strict mode: 




// Using a variable, without declaring it, is not allowed:
'use strict';
 x = 3.14;  // will throw an error




// Objects are variables too.
// Using an object, without declaring it, is not allowed:
'use strict';
 
  // Will throw an error
  x = {p1:10, p2:20};




'use strict';
 let x = 3.14;
 
// Deleting a function is also not allowed
'use strict';
 function x(p1, p2) {};
 
 // Will throw an error
 delete x;     




'use strict';
 
 // Will throw an error
 function x(p1, p1) {};  




'use strict';
 
 // Will throw an error
 let x = 010;      




'use strict';
 
 // Will throw an error
 let x = \010;    




'use strict';
 let obj = {};
 Object.defineProperty(obj, "x", {value:0, writable:false});
 
 // Will throw an error
 obj.x = 3.14;   




'use strict';
 let obj = {get x() {return 0} };
 
 // Will throw an error
 obj.x = 3.14;    




'use strict';
 
 // Will throw an error
 delete Object.prototype;




'use strict';
 
 // Will throw an error
 let eval = 3.14; 




'use strict';
 
 // Will throw an error
 let arguments = 3.14;   




'use strict';
 
 // Will throw an error
 with (Math){x = cos(2)};

Note: In function calls like f(), this value was the global object. In strict mode, it is now undefined. In normal JavaScript, a developer will not receive any error feedback assigning values to non-writable properties.


Article Tags :