JavaScript variable promotion and closure understanding
This article gives you a detailed analysis of the relevant knowledge points of JavaScript variable promotion and closure. Friends who are interested in this can refer to it.
Let's look at a question first:
<script> console.log(typeof a)//undefined var a='littlebear'; console.log(a)//littlebear </script> <script> console.log(typeof a)//string var a=1; console.log(a)//1 </script>
In the first script, you can see that var a is promoted to the top, and a = 'littlebear' is kept in place.
The second script, the reason why undefined is not printed first, is because a has been declared by var above, so var a will not be promoted again.
Look at another question:
<script> console.log(a)//function a(){} var a=1; console.log(a)//1 function a(){} console.log(a)//1 </script>
You can see that function a(){} is promoted to the top. Explain the hoisting of functions and the hoisting of variables
1. Variable hoisting
Before ES6, JavaScript did not have block-level scope (a pair of curly braces {} that is is a block-level scope), with only global scope and function scope. Variable hoisting hoists a variable declaration to the beginning of its scope.
The example of the last resume is:
console.log(global); // undefined var global = 'global'; console.log(global); // global function fn () { console.log(a); // undefined var a = 'aaa'; console.log(a); // aaa } fn();The reason why the above print result is due to the variable promotion of js, in fact, the above code is executed as follows:
var global; // 变量提升,全局作用域范围内,此时只是声明,并没有赋值 console.log(global); // undefined global = 'global'; // 此时才赋值 console.log(global); // 打印出global function fn () { var a; // 变量提升,函数作用域范围内 console.log(a); a = 'aaa'; console.log(a); } fn();
2. Function promotion
There are two ways to create functions in js: function declaration and function literal. Function hoisting only exists in function declarations! For example:console.log(f1); // function f1() {} console.log(f2); // undefined function f1() {} var f2 = function() {}The reason why there are the above print results is because the function promotion in js causes the code to actually be executed as follows:
function f1() {} // 函数提升,整个代码块提升到文件的最开始 console.log(f1); console.log(f2); var f2 = function() {}
3. What is Closure
A closure is a function that has access to a variable in the scope of another function. Simply put, Javascript allows the use of internal functions---that is, function definitions and function expressions are located in the function body of another function. Furthermore, these inner functions have access to all local variables, parameters, and other inner functions declared in the outer function in which they exist. A closure is formed when one of these inner functions is called outside the outer function that contains them.4. The scope of variables
To understand closures, you must first understand the scope of variables. The scope of variables is nothing more than two types: global variables and local variables. The special thing about the Javascript language is that global variables can be read directly inside the function. The internal function can access the variables of the external function because the scope chain of the internal function includes the scope of the external function; can also be understood as: the scope of the internal function It radiates to the scope of the external function;var n=999; function f1(){ alert(n); } f1(); // 999On the other hand, the local variables within the function cannot be read outside the function.
function f1(){ var n=999; } alert(n); // errorThere is one thing to note here. When declaring variables inside a function, you must use the var command. If you don't use it, you are actually declaring a global variable!
function f1(){ n=999; } f1(); alert(n); // 999
5. How to write and use closures
var Circle={ "PI":3.14159, "area":function(r){ return this.PI * r * r; } }; alert( Circle.area(1.0) );//3.14159I didn’t realize at first that writing objects in this way is also a kind of closure. Looking back today, this It’s the classic use of closure!
6. Points of note when using closures
1) Since closures will cause the variables in the function to be stored in memory, the memory consumption is very large, so Closures cannot be abused, otherwise it will cause performance problems on the web page and may cause memory leaks in IE. The solution is to delete all unused local variables before exiting the function. 2) The closure will change the value of the variable inside the parent function outside the parent function. Therefore, if you use the parent function as an object, the closure as its public method, and the internal variables as its private value, you must be careful not to Feel free to change the value of the variable inside the parent function. The above is what I compiled for everyone. I hope it will be helpful to everyone in the future. Related articles:Vue loading custom js file method
Instance of executing function after leaving the vue page
Usage of vue carousel plug-in vue-concise-slider
The above is the detailed content of JavaScript variable promotion and closure understanding. For more information, please follow other related articles on the PHP Chinese website!

Python and JavaScript have their own advantages and disadvantages in terms of community, libraries and resources. 1) The Python community is friendly and suitable for beginners, but the front-end development resources are not as rich as JavaScript. 2) Python is powerful in data science and machine learning libraries, while JavaScript is better in front-end development libraries and frameworks. 3) Both have rich learning resources, but Python is suitable for starting with official documents, while JavaScript is better with MDNWebDocs. The choice should be based on project needs and personal interests.

The shift from C/C to JavaScript requires adapting to dynamic typing, garbage collection and asynchronous programming. 1) C/C is a statically typed language that requires manual memory management, while JavaScript is dynamically typed and garbage collection is automatically processed. 2) C/C needs to be compiled into machine code, while JavaScript is an interpreted language. 3) JavaScript introduces concepts such as closures, prototype chains and Promise, which enhances flexibility and asynchronous programming capabilities.

Different JavaScript engines have different effects when parsing and executing JavaScript code, because the implementation principles and optimization strategies of each engine differ. 1. Lexical analysis: convert source code into lexical unit. 2. Grammar analysis: Generate an abstract syntax tree. 3. Optimization and compilation: Generate machine code through the JIT compiler. 4. Execute: Run the machine code. V8 engine optimizes through instant compilation and hidden class, SpiderMonkey uses a type inference system, resulting in different performance performance on the same code.

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.

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

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 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 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.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Linux new version
SublimeText3 Linux latest version

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft

Dreamweaver Mac version
Visual web development tools

Atom editor mac version download
The most popular open source editor