search
HomeWeb Front-endJS TutorialAnalysis and explanation of JavaScript scope and closure

[Introduction] The scope of JavaScript is bounded by functions, and different functions have relatively independent scopes. Global variables can be declared and accessed inside the function, and local variables can also be declared (using the var keyword, the parameters of the function are also local variables), but the internal local variables cannot be accessed outside the function: functio

The scope of JavaScript is a function bounds, different functions have relatively independent scopes. Global variables can be declared and accessed inside the function, and local variables can also be declared (using the var keyword, the parameters of the function are also local variables), but internal local variables cannot be accessed outside the function:
function test() {
var a = 0; // Local variable
b = 1; // Global variable
}
a = ?, b = ? // a is undefined, b is 1

Local variables with the same name will overwrite global variables, but essentially they are two independent variables, and changes to one of them will not Affects the other party:
a = 5; // The value of a outside the function is 5
function test() {
var a = 4; // The value of a inside the function is 4
}();
a = ? //The value of a outside the function is still 5 and is not affected by the function

Generally speaking, after the function ends, all references to the internal variables of the function end, and the function The local variables inside will be recycled and the execution environment of the function will be cleared. However, if the internal function is used as the return result of the function, the situation will change:
function test(i) {
var b = i * i;
return function() {
return b--;
};
}
var a = test(8);
a(); / / The return value is 64, the internal variable b is 63
a(); // The return value is 63, the internal variable b is 62

When the internal function is used as the return value, because after the function ends The reference of the variable has not ended, so the local variables of the function cannot be recycled, and the execution environment of the function is retained, thus forming a closure effect. Internal variables that should be recycled can be accessed through this reference.
Closure also makes the local variables of the function "private" variables, which can only be accessed through the returned internal function and cannot be changed by any other means.
Therefore, closures can be used to maintain local variables and protect variables.
Situation without closure:
var a = []; // Assume a contains 5 elements
for (var i = 0, m = a.length; i a[i].onclick = function(e) {
return 'No. ' + i;
};
}

// Click on any For an element, the return value is "No. 5", because the final value of i is 5
Using closure:
function test(i) {
return function(e) {
return 'No. ' + i;
};
}
var a = []; // Assume a contains 5 elements
for (var i = 0, m = a.length; i a[i].onclick = test(i);
}

// Use closures to maintain local variables, click The element returns No. 0 ~ No. 4
While closure brings convenience, it also brings some disadvantages:
1. The complexity of the program increases, making it more difficult to understand.
2. Interference with normal operation Garbage collection, complex closures may also lead to memory failure and crash
3. Huge closures are often accompanied by performance problems
Therefore, closures should be streamlined and small, rather than large and complex, and large and complex closures should be avoided. Scale using closures. The emergence of closures is itself a bug in the language, but it remains because of its unique functions. It is a supplementary means, not the main function.

The above is the detailed content of Analysis and explanation of JavaScript scope and closure. For more information, please follow other related articles on the PHP Chinese website!

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
Javascript Data Types : Is there any difference between Browser and NodeJs?Javascript Data Types : Is there any difference between Browser and NodeJs?May 14, 2025 am 12:15 AM

JavaScript core data types are consistent in browsers and Node.js, but are handled differently from the extra types. 1) The global object is window in the browser and global in Node.js. 2) Node.js' unique Buffer object, used to process binary data. 3) There are also differences in performance and time processing, and the code needs to be adjusted according to the environment.

JavaScript Comments: A Guide to Using // and /* */JavaScript Comments: A Guide to Using // and /* */May 13, 2025 pm 03:49 PM

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python vs. JavaScript: A Comparative Analysis for DevelopersPython vs. JavaScript: A Comparative Analysis for DevelopersMay 09, 2025 am 12:22 AM

The main difference between Python and JavaScript is the type system and application scenarios. 1. Python uses dynamic types, suitable for scientific computing and data analysis. 2. JavaScript adopts weak types and is widely used in front-end and full-stack development. The two have their own advantages in asynchronous programming and performance optimization, and should be decided according to project requirements when choosing.

Python vs. JavaScript: Choosing the Right Tool for the JobPython vs. JavaScript: Choosing the Right Tool for the JobMay 08, 2025 am 12:10 AM

Whether to choose Python or JavaScript depends on the project type: 1) Choose Python for data science and automation tasks; 2) Choose JavaScript for front-end and full-stack development. Python is favored for its powerful library in data processing and automation, while JavaScript is indispensable for its advantages in web interaction and full-stack development.

Python and JavaScript: Understanding the Strengths of EachPython and JavaScript: Understanding the Strengths of EachMay 06, 2025 am 12:15 AM

Python and JavaScript each have their own advantages, and the choice depends on project needs and personal preferences. 1. Python is easy to learn, with concise syntax, suitable for data science and back-end development, but has a slow execution speed. 2. JavaScript is everywhere in front-end development and has strong asynchronous programming capabilities. Node.js makes it suitable for full-stack development, but the syntax may be complex and error-prone.

JavaScript's Core: Is It Built on C or C  ?JavaScript's Core: Is It Built on C or C ?May 05, 2025 am 12:07 AM

JavaScriptisnotbuiltonCorC ;it'saninterpretedlanguagethatrunsonenginesoftenwritteninC .1)JavaScriptwasdesignedasalightweight,interpretedlanguageforwebbrowsers.2)EnginesevolvedfromsimpleinterpreterstoJITcompilers,typicallyinC ,improvingperformance.

JavaScript Applications: From Front-End to Back-EndJavaScript Applications: From Front-End to Back-EndMay 04, 2025 am 12:12 AM

JavaScript can be used for front-end and back-end development. The front-end enhances the user experience through DOM operations, and the back-end handles server tasks through Node.js. 1. Front-end example: Change the content of the web page text. 2. Backend example: Create a Node.js server.

Python vs. JavaScript: Which Language Should You Learn?Python vs. JavaScript: Which Language Should You Learn?May 03, 2025 am 12:10 AM

Choosing Python or JavaScript should be based on career development, learning curve and ecosystem: 1) Career development: Python is suitable for data science and back-end development, while JavaScript is suitable for front-end and full-stack development. 2) Learning curve: Python syntax is concise and suitable for beginners; JavaScript syntax is flexible. 3) Ecosystem: Python has rich scientific computing libraries, and JavaScript has a powerful front-end framework.

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 Article

Hot Tools

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment