search
HomeWeb Front-endJS TutorialUnderstanding JavaScript variable scopes becomes easier_javascript tips

JavaScript itself is a simple language, but its variable scope issue also makes many people dizzy. This is mainly because of the existence of JavaScript closures. This article does not intend to explain the issue of JavaScript variable scope in depth (in fact, I do not have the ability to talk about this topic in depth), nor does it talk about the topic of "closure". This article only discusses the most practical JavaScript scope knowledge points.

1. JavaScript scope classification
JavaScript has two scopes: global (window) and function level (function). Function level (function) should not be understood as "block level (braces {} level)".

2. Distinguish and define JavaScript global variables and local variables
1.1 Variables defined outside all functions, with or without the var keyword, are global variables. The global variable is actually parsed into an attribute of the window object, so we can access it in the "window.global variable name" method. It is recommended to use the variable name to access it directly unless necessary. The following example demonstrates the most common way to define global variables:

Copy the code The code is as follows:

var msg1='This is message 1';
msg2='This is message 2';
alert(window.msg1); //This is message 1 Use the window keyword to access
alert(window .msg2); //This is message 2
alert(msg1); //This is message 1 omit the access method of window keyword
alert(msg2); //This is message 2
function otherFunction (){} //Some other function or object declaration codes
var otherObject={};

1.2 Global variables can also be defined and obtained within the function (local variable runtime environment). The definition method is not to use the var keyword, and the global variable content can be easily obtained in the local environment, just use the global variable name to reference it. It should be noted that if a local variable with the same name as the global variable is defined in the function, then the function body will use its own local variable first. If you must use a global variable with the same name at this time, please add the window prefix. For example:
Copy code The code is as follows:

var msg1='This is message 1' ;
var msg3='This is message 3';
function otherFunction()
{
msg2='This is message 2'; //Not using the var keyword is actually defining a global Variable
var msg3='Message 3';
alert(msg1); //This is message 1 (Of course, global variables defined outside can be accessed within the function, and no matter how deeply the function is nested, it can be correctly obtained This global variable is one of the manifestations of JavaScript closure)
alert(msg3); //Message 3 (local variable msg3)
alert(window.msg3); //This is message 3 (using The window prefix accesses the global variable msg3 with the same name)
alert(this.msg3); //This is message 3 (because otherFunction () is defined in a global environment, at this time, the this of otherFunction () also points to window, so You see that window.msg3 is equal to this.msg3)
}
otherFunction();
//msg1 defined outside the otherFunction function and msg2 defined inside are still global variables
alert(window .msg1); //This is message 1
alert(window.msg2); //This is message 2

2.1 Using the var keyword, variables defined in the function body are local variables , this variable can be used by all statement blocks ({}) and sub-functions below it. This variable can be accessed anywhere in this function, but cannot be accessed "directly" outside this function (closures allow indirect access, or proxy access, this knowledge point is beyond the scope of this article). For example:
Copy code The code is as follows:

function showMsg()
{
if (true)
{
var msg='This is message';
}
alert(msg); //This is message
}
showMsg();
alert(typeof(msg)); //undefiend
//The variable msg defined within if {} braces can also be accessed within showMsg() outside if, but outside showMsg() It is inaccessible

2.2 The variables of the parent function can be accessed by the child function, but the variables of the child function cannot be accessed by the parent function. Obviously this is consistent with the function-level scope we mentioned at the beginning of. It seems that the father is more cheerful and the son is stingy. For example:
Copy code The code is as follows:

function showMsg()
{
var MsgA='Message A';
this.setMsg=function(msg)
{
var MsgB='Message B' ;
alert(MsgA); //Message A (The sub-function setMsg() can access the local variable MsgA of the parent function showMsg())
}
alert(MsgB); //MsgB is not defined (in The variable MsgB defined in its child function cannot be accessed in the parent function)
}
var sm=new showMsg();
sm.setMsg('Message string');

3. Several things to pay attention to and usage skills
1. In order to avoid variables being confused or overwritten, don’t forget to add the var keyword to the definition of local variables (if necessary, we must actively release the variable after use) , that is, "variable name = null"), and it is recommended to define all variables at the beginning of each function body. For example:
Copy code The code is as follows:

var msg='Message';
function showMsg()
{
var msg; //Even if you accidentally use the same variable name as the global variable here, you don’t have to worry about overwriting the global variable with the same name
var a;
var b;
var c;
for (a=0;athis.setMsg=function(){}
}

2. Use anonymous functions skillfully to reduce naming conflicts or variable pollution. The following two pieces of code actually implement the same function, and the way the first piece of code is written is that you can boldly use the variable names you want to use in the anonymous function, etc., and you don't have to worry about the variables you define overwriting other people's definitions or your own definitions elsewhere. variable.
Copy code The code is as follows:

//Define an anonymous function and throw the code into This anonymous function can effectively reduce naming conflicts or variable pollution, which is the practice of common JS frameworks
(function()
{
var msg='This is message';
alert(msg );
})();
document.write(msg); //msg is undefined (methods other than anonymous functions cannot call the msg variable)
//------ -----------------------
var msg='This is message';
alert(msg);

3. It is not recommended to use this instead of window to access global variables in functions that do not require instantiation. Normally functions using the this keyword should be treated as JavaScript classes (I like to prefix "cls" to the class name). If the following functions are only called as ordinary functions, the this keyword should not appear, because this is usually to operate a global variable. Example:
Copy code The code is as follows:

function clsMsg()
{
this.msg='This is default message';
this.showMsg=function()
{
alert(this.msg);
}
}
sMsg=new clsMsg();
sMsg.msg='This is new message';
sMsg.showMsg();

4. Guidelines for related knowledge points
Understand the following related knowledge points It will help you better understand JavaScript variable scope. This article will not go into details for now. It will be discussed in a separate space later, so stay tuned.
(1)Understanding JavaScript "pre-parsing"
(2)JavaScript closures
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
Behind the Scenes: What Language Powers JavaScript?Behind the Scenes: What Language Powers JavaScript?Apr 28, 2025 am 12:01 AM

JavaScript runs in browsers and Node.js environments and relies on the JavaScript engine to parse and execute code. 1) Generate abstract syntax tree (AST) in the parsing stage; 2) convert AST into bytecode or machine code in the compilation stage; 3) execute the compiled code in the execution stage.

The Future of Python and JavaScript: Trends and PredictionsThe Future of Python and JavaScript: Trends and PredictionsApr 27, 2025 am 12:21 AM

The future trends of Python and JavaScript include: 1. Python will consolidate its position in the fields of scientific computing and AI, 2. JavaScript will promote the development of web technology, 3. Cross-platform development will become a hot topic, and 4. Performance optimization will be the focus. Both will continue to expand application scenarios in their respective fields and make more breakthroughs in performance.

Python vs. JavaScript: Development Environments and ToolsPython vs. JavaScript: Development Environments and ToolsApr 26, 2025 am 12:09 AM

Both Python and JavaScript's choices in development environments are important. 1) Python's development environment includes PyCharm, JupyterNotebook and Anaconda, which are suitable for data science and rapid prototyping. 2) The development environment of JavaScript includes Node.js, VSCode and Webpack, which are suitable for front-end and back-end development. Choosing the right tools according to project needs can improve development efficiency and project success rate.

Is JavaScript Written in C? Examining the EvidenceIs JavaScript Written in C? Examining the EvidenceApr 25, 2025 am 12:15 AM

Yes, the engine core of JavaScript is written in C. 1) The C language provides efficient performance and underlying control, which is suitable for the development of JavaScript engine. 2) Taking the V8 engine as an example, its core is written in C, combining the efficiency and object-oriented characteristics of C. 3) The working principle of the JavaScript engine includes parsing, compiling and execution, and the C language plays a key role in these processes.

JavaScript's Role: Making the Web Interactive and DynamicJavaScript's Role: Making the Web Interactive and DynamicApr 24, 2025 am 12:12 AM

JavaScript is at the heart of modern websites because it enhances the interactivity and dynamicity of web pages. 1) It allows to change content without refreshing the page, 2) manipulate web pages through DOMAPI, 3) support complex interactive effects such as animation and drag-and-drop, 4) optimize performance and best practices to improve user experience.

C   and JavaScript: The Connection ExplainedC and JavaScript: The Connection ExplainedApr 23, 2025 am 12:07 AM

C and JavaScript achieve interoperability through WebAssembly. 1) C code is compiled into WebAssembly module and introduced into JavaScript environment to enhance computing power. 2) In game development, C handles physics engines and graphics rendering, and JavaScript is responsible for game logic and user interface.

From Websites to Apps: The Diverse Applications of JavaScriptFrom Websites to Apps: The Diverse Applications of JavaScriptApr 22, 2025 am 12:02 AM

JavaScript is widely used in websites, mobile applications, desktop applications and server-side programming. 1) In website development, JavaScript operates DOM together with HTML and CSS to achieve dynamic effects and supports frameworks such as jQuery and React. 2) Through ReactNative and Ionic, JavaScript is used to develop cross-platform mobile applications. 3) The Electron framework enables JavaScript to build desktop applications. 4) Node.js allows JavaScript to run on the server side and supports high concurrent requests.

Python vs. JavaScript: Use Cases and Applications ComparedPython vs. JavaScript: Use Cases and Applications ComparedApr 21, 2025 am 12:01 AM

Python is more suitable for data science and automation, while JavaScript is more suitable for front-end and full-stack development. 1. Python performs well in data science and machine learning, using libraries such as NumPy and Pandas for data processing and modeling. 2. Python is concise and efficient in automation and scripting. 3. JavaScript is indispensable in front-end development and is used to build dynamic web pages and single-page applications. 4. JavaScript plays a role in back-end development through Node.js and supports full-stack development.

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

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

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

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)