search
HomeWeb Front-endJS TutorialDetailed introduction to strict mode of Javascript_javascript skills

"Strict mode" is a new syntax defined by ECMA-262 Edition 5, which means that strict Javascript syntax must be used for execution. Some commonly used writing methods in the past will throw SyntaxError exceptions, such as:
1. There is no var declaration before the variable
2. Use octal syntax: var n = 023 and var s = "

1. Why use "strict mode"


The main purposes of establishing "strict mode" are as follows:

1. Eliminate some unreasonable and imprecise aspects of Javascript syntax and reduce some weird behaviors;
2. Eliminate some unsafe aspects of code running and ensure the safety of code running;
3. Improve Compiler efficiency and increased running speed;
4. Pave the way for new versions of Javascript in the future.

"Strict Mode" reflects the more reasonable, safer and more rigorous development direction of Javascript. Mainstream browsers, including IE 10, already support it, and many large projects have begun to fully embrace it.
On the other hand, the same code may have different running results in "strict mode"; some statements that can run in "normal mode" will not run in "strict mode". Mastering these contents will help you understand Javascript in more detail and make you a better programmer.

This article will introduce "strict mode" in detail.


2. Declare "strict mode"

Declaring "strict mode" is very simple with just one statement:

Copy the code

The code is as follows:

"use strict";


Note: Older versions of browsers will treat it as a line of ordinary strings and ignore it.

3. The position and context of declaring "strict mode" "Strict mode" mainly affects the scope in which it is located. If used in a function, it will not make the global scope and other unused functions become "strict mode". That is, the scope of a strict mode declaration depends on its context. If strict mode is declared in the global context (outside the scope of a function), all code in the program is in strict mode. If you declare strict mode in a function, all code within the function is in strict mode. For example, in the following example, all code is in strict mode, and a variable declaration outside a function results in a syntax error: "Variable is not defined in strict mode." "Strict mode" has two calling methods, suitable for different situations.
1. For the entire script file

Put "use strict" on the first line of the script file, and the entire script will run in "strict mode". If this line of statement is not the first line, it is invalid and the entire script runs in "normal mode". This needs special attention if code files from different modes are merged into one file.

(Strictly speaking, as long as it is not preceded by a statement that produces actual operation results, "use strict" does not need to be on the first line, such as directly following an empty semicolon.)

Copy code

The code is as follows:


<script><P>"use strict"; <div class="codetitle">console.log("This is strict mode.");<span></script> <script></script>console.log("This is normal mode.");

The above code indicates that there are two pieces of Javascript code in a web page. The former script tag is in strict mode, but the latter one is not.


2. For a single function


Put "use strict" on the first line of the function body, and the entire function will run in "strict mode".

Copy code

The code is as follows:

function strict(){
"use strict" ;

return "This is strict mode.";}function notStrict() {return "This is normal mode.";}

3. Alternative way of writing script files

Because the first calling method is not conducive to file merging, a better approach is to borrow the second method and The entire script file is placed in an anonymous function that is executed immediately.
Copy code The code is as follows:

(function (){

"use strict";
// some code here

})();

4. Syntax and behavior changes in "strict mode"

"Strict mode" has made some changes to the syntax and behavior of Javascript.

1. Explicit declaration of global variables

In normal mode, when we use variables, we do not have to declare them with var first (explicit declaration), but in Strict Mode, variables must be declared with var before they can be used, otherwise it will An error occurred.

Copy code The code is as follows:

"use strict";
v = 1; // Error reported, v is not declared
for(i = 0; i }

Therefore, in strict mode, variables must Declare it with the var command first, and then use it.

2. Static binding

A feature of the Javascript language is that it allows "dynamic binding", that is, which object certain properties and methods belong to is not determined at compile time, but at runtime.

Strict mode imposes some restrictions on dynamic binding. In some cases, only static binding is allowed. In other words, which object the properties and methods belong to is determined during the compilation stage. This will help improve compilation efficiency, make the code easier to read, and cause fewer surprises.

Specifically, it involves the following aspects.

(1) It is forbidden to use the with statement

Because the with statement cannot determine at compile time which object the attribute belongs to.

Copy code The code is as follows:

"use strict";
var v = 1 ;
with (o){ // Syntax error
v = 2;
}

(2) Create eval scope

In normal mode, the Javascript language has two variable scopes: global scope and function scope. Strict mode creates a third scope: eval scope.
In normal mode, the scope of the eval statement depends on whether it is in the global scope or the function scope. In strict mode, the eval statement itself is a scope and can no longer generate global variables. The variables it generates can only be used inside eval.

Copy code The code is as follows:

"use strict";
var x = 2 ;
console.info(eval("var x = 5; x")); // 5
console.info(x); // 2

3. Enhanced security measures

(1) Prohibit this keyword from pointing to the global object

Copy code The code is as follows:

function f(){
return !this;
}
// Return false, because "this" points to the global object, "!this" is false
function f (){
"use strict";
return !this;
}

// Return true, because in strict mode, the value of this is undefined, so "!this" is true.
Therefore, when using the constructor, if you forget to add new, this will no longer point to the global object, but an error will be reported.
Copy code The code is as follows:

function f(){

"use strict";
this.a = 1;
};
f();// Error, this is undefined


In a normal function call f(), the value of this will point to the global object. In strict mode, the value of this will point to undefined. When the function is called through call and apply, if the thisvalue parameter passed in is a For primitive values ​​(strings, numbers, Boolean values) except null and undefined, the value of this will become the packaging object corresponding to that primitive value. If the value of the thisvalue parameter is undefined or null, the value of this will point to the global object. In strict mode, the value of this is the value of the thisvalue parameter without any type conversion.

(2) It is forbidden to traverse the call stack inside the function

Copy the code The code is as follows:

function f1(){

"use strict";
f1.caller; // Error reporting
f1.arguments; // Error reporting
}
f1();

4. Deletion of variables is prohibited

Variables cannot be deleted in strict mode. Only object attributes with configurable set to true can be deleted.

Copy code The code is as follows:

"use strict";
var x;
delete x; // Syntax error
var o = Object.create(null, 'x', {
value: 1,
configurable: true
});
delete o.x ; // Deletion successful

5. Explicit error reporting

In normal mode, assigning a value to a read-only property of an object will not report an error, but will fail silently. In strict mode, an error will be reported.

Copy code The code is as follows:

"use strict";
var o = { };
Object.defineProperty(o, "v", { value: 1, writable: false });
o.v = 2; // Error reporting

In strict mode, use getter for a If the attribute read by the method is assigned a value, an error will be reported.
Copy code The code is as follows:

"use strict";
var o = {
get v() { return 1; }
};
o.v = 2; // Error report

In strict mode, adding new attributes to objects that are prohibited from expansion will report an error.
Copy code The code is as follows:

"use strict";
var o = { };
Object.preventExtensions(o);
o.v = 1; // Error reporting

In strict mode, deleting an attribute that cannot be deleted will report an error.
Copy code The code is as follows:

"use strict";
delete Object.prototype ; // Report error

6. Duplicate name error

Strict mode has added some new syntax errors.

(1) Objects cannot have attributes with duplicate names

In normal mode, if an object has multiple attributes with the same name, the last assigned attribute will overwrite the previous value. In strict mode, this is a syntax error.

Copy code The code is as follows:

"use strict";
var o = {
p: 1,
p: 2
}; // Syntax error

(2) Functions cannot have parameters with duplicate names

In normal mode, if the function has multiple parameters with the same name, you can use arguments[i] to read them. In strict mode, this is a syntax error.

Copy code The code is as follows:

"use strict";
function f(a , a, b) { // Syntax error
return ;
}

7. Octal notation is prohibited

In normal mode, if the first digit of an integer is 0, it means it is an octal number. For example, 0100 is equal to 64 in decimal. Strict mode prohibits this representation, the first bit of the integer is 0, and an error will be reported.

Copy code The code is as follows:

"use strict";
var n = 0100 ; // Syntax error
8. Limitations of arguments object

arguments is the parameter object of the function, and strict mode restricts its use.

(1) Assignment to arguments is not allowed

Copy code The code is as follows:

"use strict";
arguments ; // Syntax error
var obj = { set p(arguments) { } }; // Syntax error
try { } catch ( arguments) { } // Syntax error
function arguments() { } // Syntax error
var f = new Function("arguments", "'use strict'; return 17;"); // Syntax error

(2) arguments no longer track parameter changes

Copy code The code is as follows:

function f(a) {
a = 2;
return [a, arguments[0]];
}
f(1); // Normal mode is [2,2]
function f(a) {
"use strict";
a = 2;
return [a, arguments[0]];
}
f (1); // Strict mode is [2,1]

(3) It is forbidden to use arguments.callee

This means that you cannot call itself inside an anonymous function.

Copy code The code is as follows:

"use strict";
var f = function () { return arguments.callee; };
f(); // Report error

9. Functions must be declared at the top level

New versions of Javascript will introduce "block-level scope" in the future. In order to keep in line with the new version, strict mode only allows functions to be declared in the global scope or the top level of the function scope. That is, it is not allowed to declare functions within a non-function code block.

Copy code The code is as follows:

"use strict";
if (true) {
function f() { } // Syntax error
}
for (var i = 0; i function f2() { } // Syntax error
}


10. Reserved words

In order to transition to new versions of Javascript in the future, strict mode adds some new reserved words: implements, interface, let, package, private, protected, public, static, yield.
Using these words as variable names will result in an error.

Copy code The code is as follows:

function package(protected) { // Syntax error
"use strict";
var implements; // Syntax error
}

In addition, the fifth version of ECMAscript itself also stipulates other reserved words (class, enum, export, extends, import , super), as well as the const reserved words added by major browsers, cannot be used as variable names.
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Beyond the Browser: JavaScript in the Real WorldBeyond the Browser: JavaScript in the Real WorldApr 12, 2025 am 12:06 AM

JavaScript's applications in the real world include server-side programming, mobile application development and Internet of Things control: 1. Server-side programming is realized through Node.js, suitable for high concurrent request processing. 2. Mobile application development is carried out through ReactNative and supports cross-platform deployment. 3. Used for IoT device control through Johnny-Five library, suitable for hardware interaction.

Building a Multi-Tenant SaaS Application with Next.js (Backend Integration)Building a Multi-Tenant SaaS Application with Next.js (Backend Integration)Apr 11, 2025 am 08:23 AM

I built a functional multi-tenant SaaS application (an EdTech app) with your everyday tech tool and you can do the same. First, what’s a multi-tenant SaaS application? Multi-tenant SaaS applications let you serve multiple customers from a sing

How to Build a Multi-Tenant SaaS Application with Next.js (Frontend Integration)How to Build a Multi-Tenant SaaS Application with Next.js (Frontend Integration)Apr 11, 2025 am 08:22 AM

This article demonstrates frontend integration with a backend secured by Permit, building a functional EdTech SaaS application using Next.js. The frontend fetches user permissions to control UI visibility and ensures API requests adhere to role-base

JavaScript: Exploring the Versatility of a Web LanguageJavaScript: Exploring the Versatility of a Web LanguageApr 11, 2025 am 12:01 AM

JavaScript is the core language of modern web development and is widely used for its diversity and flexibility. 1) Front-end development: build dynamic web pages and single-page applications through DOM operations and modern frameworks (such as React, Vue.js, Angular). 2) Server-side development: Node.js uses a non-blocking I/O model to handle high concurrency and real-time applications. 3) Mobile and desktop application development: cross-platform development is realized through ReactNative and Electron to improve development efficiency.

The Evolution of JavaScript: Current Trends and Future ProspectsThe Evolution of JavaScript: Current Trends and Future ProspectsApr 10, 2025 am 09:33 AM

The latest trends in JavaScript include the rise of TypeScript, the popularity of modern frameworks and libraries, and the application of WebAssembly. Future prospects cover more powerful type systems, the development of server-side JavaScript, the expansion of artificial intelligence and machine learning, and the potential of IoT and edge computing.

Demystifying JavaScript: What It Does and Why It MattersDemystifying JavaScript: What It Does and Why It MattersApr 09, 2025 am 12:07 AM

JavaScript is the cornerstone of modern web development, and its main functions include event-driven programming, dynamic content generation and asynchronous programming. 1) Event-driven programming allows web pages to change dynamically according to user operations. 2) Dynamic content generation allows page content to be adjusted according to conditions. 3) Asynchronous programming ensures that the user interface is not blocked. JavaScript is widely used in web interaction, single-page application and server-side development, greatly improving the flexibility of user experience and cross-platform development.

Is Python or JavaScript better?Is Python or JavaScript better?Apr 06, 2025 am 12:14 AM

Python is more suitable for data science and machine learning, while JavaScript is more suitable for front-end and full-stack development. 1. Python is known for its concise syntax and rich library ecosystem, and is suitable for data analysis and web development. 2. JavaScript is the core of front-end development. Node.js supports server-side programming and is suitable for full-stack development.

How do I install JavaScript?How do I install JavaScript?Apr 05, 2025 am 12:16 AM

JavaScript does not require installation because it is already built into modern browsers. You just need a text editor and a browser to get started. 1) In the browser environment, run it by embedding the HTML file through tags. 2) In the Node.js environment, after downloading and installing Node.js, run the JavaScript file through the command line.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function