strict mode
Strict Mode
// applies strict mode to the current and child scopes
function(){
"use strict"; // invokes strict mode
console.log( "in strict mode" );
function(){
console.log( "also in strict mode" );
}
}
// out of scope
console.log( "NOT in strict mode" );
Invoking Strict Mode
Strict Mode
- Silent errors now throw errors
- Allows the interpreter to perform optimizations
- Prohibits some syntax that may be defined in future versions of ECMAScript
- Makes it easier to write "secure" code
Non-Strict Mode
// accidentally defining a variable in the global scope
foo = "bad"; // forgot to use the var keyword
// no errors are thrown
global.foo; // bad
Strict Mode
"use strict";
// accidentally defining a variable in the global scope
foo = "bad"; // forgot to use the var keyword
// throws ReferenceError: foo is not defined
"use strict";
var foo = "good";
Non-Strict Mode
var foo = 1;
fuu = 2; // typo
foo; // 1, oops!
global.fuu; // 2, pollution!
Strict Mode
"use strict";
var foo = 1;
fuu = 2; // typo
// throws ReferenceError: fuu is not defined
Non-Strict Mode
// normal mode allows duplicate keys in objects
var favorites = {
starWars : "episode 6",
starWars : "episode 1"
}
favorites.starWars; // ??
Strict Mode
"use strict";
var favorites = {
starWars : "episode 6",
starWars : "episode 1"
// SyntaxError: Duplicate data property in object
// literal not allowed in strict mode
}
// exited due to error
Strict Mode
ECMAScript6 keywords are now reserved words
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
Strict Mode
prohibits function statements not at the top level of a script or function
"use strict";
if (true){
function foo() { }
// SyntaxError: In strict mode code, functions can only be declared
// at top level or immediately within another function.
foo(); // program exited
}
for (var i = 0; i < 5; i++){
function bar() { }
// SyntaxError: In strict mode code, functions can only be declared
// at top level or immediately within another function.
bar(); // program exited
}
function baz(){ // ok
function qux() { } // ok
function norf() { } // ok
}
strict mode
By Jon Borgonia
strict mode
- 2,120