xxxxxxxxxx
function myfunction() {
"use strict;"
var v = "This is a strict mode function";
}
xxxxxxxxxx
'use strict';
//Strict mode makes some bad practices return errors.
//Some programmers use this to help them avoid bad habits.
xxxxxxxxxx
Strict mode changes previously accepted "bad syntax" into real errors.
As an example, in normal JavaScript, mistyping a variable name creates a
new global variable. In strict mode, this will throw an error, making it
impossible to accidentally create a global variable.
In normal JavaScript, a developer will not receive any error feedback assigning
values to non-writable properties.
In strict mode, any assignment to a non-writable property, a getter-only
property, a non-existing property, a non-existing variable, or a non-existing
object, will throw an error.
Strict mode makes it easier to write "secure" JavaScript.
xxxxxxxxxx
/*
even though x is not defined with a keyword like var, let or const, the
browser won't throw an error
*/
x = 1;
function myFunc() {
"use strict";
/*
this will throw an error as y is being assigned a value without it
being declared AND "use strict" has been used for the function
*/
y = 4;
}
/*
Basically, "use strict" is a way for programmers to avoid bad habits by using
invalid syntax which browsers accept but is still wrong
*/
xxxxxxxxxx
myVariable = 9;
console.log(myVariable); // 9
function hello() {
// applicable only for this function
'use strict';
string = 'hello'; // throws an error
}
hello();
xxxxxxxxxx
'use strict';
this.name = 'Jack';
function greet() {
// this refers to undefined
console.log(this);
}
greet(); // undefined
xxxxxxxxxx
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.
xxxxxxxxxx
console.log("some code");
// 'use strict' is ignored
// must be at the top
"use strict";
x = 21; // does not throw an error