Explanation of knowledge about scope and closure in javaScript
Review summary: The behavior of function scope and block scope is the same. It can be considered that any variable declared in a certain scope will be attached to this scope.
1. Why is this?
1. Now we ask two questions and give the following two pieces of code. Please think about the output results first, and then practice them. I believe you will have doubts!
//第一段代码 a=2; var a; console.log(a); //第二段代码 console.log(a); var a=2;
2. I guess the result is like this: you guess the result of the first piece of code is underfined, and then the result when running on the browser is 2; you guess the result of the second piece of code is 2, but on the browser The result of the operation is underfined. brother! Is this the case (even if it is not the case I guess you must be making other forms of wrong guesses).
3. Let’s explain why the result of the first code is 2, and the result of the second code is undefined. First of all, recall what we said before that a code with var a=2 looks like two codes in JS. Code snippet: var a and a=2; the former is executed during compilation and the latter is executed at runtime, so what’s the question? The declarations of variables and functions will be processed before the program is executed, so is the running order of the code still the writing order you see?
4. For the first piece of code, the second line of code var a is processed first during compilation, and the first and third lines are processed at runtime. Then the processing form of the entire code is as follows:
//第一段代码被JS这样的顺序处理了 var a; a=2; console.log(a);
Look! You can understand it this way, oh! Declare first, then assign, then print out.
5. For the same reason, the second piece of code is processed as follows:
//第二段代码被JS以这样的形式处理: var a; console.log(a); a=2;
A has been declared during compilation, but during execution, it is executed to the console. a has not been assigned a value before log(a), and of course it is underfined when printed;
6. Therefore, during the process of the code being processed by JS, the positions of the declarations of variables and functions in the code seem to be moved. At the top of the scope, the priority process declared during the compilation process is to promote!
2. Each scope will be promoted.
1. Look at the following code:
foo(); function foo(){ console.log(a); var a=2; }
The global scope will promote the foo function declaration. When foo is used, A will be promoted in the domain, and the processing form is as follows:
function foo(){ var a; console.log(a); a=2; } foo();
2. Special attention: Function declarations will be promoted, but function expressions will not be promoted. Named function expression, the name identifier cannot be used in the scope before assignment . What do these two sentences mean? The following two pieces of code tell you:
foo(); TypeError bar(); ReferenceError var foo=function bar(){ //.... }
After this code is improved, it looks like this:
var foo; foo(); TypeError bar(); ReferenceError foo=function (){ var bar... //.... }
So for foo, there is a declaration, but there is no assignment to foo, and foo is undefined. At this time Operating on undefined is of course an error in the type of operation. And bar, not even declared, is declared in the function expression of foo, so it is an undeclared error.
3. For promotion: Functions are promoted first, followed by variables ;
Related recommendations:
In-depth understanding of javascript scope and closure
Detailed explanation of JavaScript scope and closure
The above is the detailed content of Explanation of knowledge about scope and closure in javaScript. For more information, please follow other related articles on the PHP Chinese website!

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

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Detailed explanation of JavaScript string replacement method and FAQ This article will explore two ways to replace string characters in JavaScript: internal JavaScript code and internal HTML for web pages. Replace string inside JavaScript code The most direct way is to use the replace() method: str = str.replace("find","replace"); This method replaces only the first match. To replace all matches, use a regular expression and add the global flag g: str = str.replace(/fi

So here you are, ready to learn all about this thing called AJAX. But, what exactly is it? The term AJAX refers to a loose grouping of technologies that are used to create dynamic, interactive web content. The term AJAX, originally coined by Jesse J

10 fun jQuery game plugins to make your website more attractive and enhance user stickiness! While Flash is still the best software for developing casual web games, jQuery can also create surprising effects, and while not comparable to pure action Flash games, in some cases you can also have unexpected fun in your browser. jQuery tic toe game The "Hello world" of game programming now has a jQuery version. Source code jQuery Crazy Word Composition Game This is a fill-in-the-blank game, and it can produce some weird results due to not knowing the context of the word. Source code jQuery mine sweeping game

This tutorial demonstrates how to create a captivating parallax background effect using jQuery. We'll build a header banner with layered images that create a stunning visual depth. The updated plugin works with jQuery 1.6.4 and later. Download the

Article discusses creating, publishing, and maintaining JavaScript libraries, focusing on planning, development, testing, documentation, and promotion strategies.

The article discusses strategies for optimizing JavaScript performance in browsers, focusing on reducing execution time and minimizing impact on page load speed.

This article demonstrates how to automatically refresh a div's content every 5 seconds using jQuery and AJAX. The example fetches and displays the latest blog posts from an RSS feed, along with the last refresh timestamp. A loading image is optiona

Matter.js is a 2D rigid body physics engine written in JavaScript. This library can help you easily simulate 2D physics in your browser. It provides many features, such as the ability to create rigid bodies and assign physical properties such as mass, area, or density. You can also simulate different types of collisions and forces, such as gravity friction. Matter.js supports all mainstream browsers. Additionally, it is suitable for mobile devices as it detects touches and is responsive. All of these features make it worth your time to learn how to use the engine, as this makes it easy to create a physics-based 2D game or simulation. In this tutorial, I will cover the basics of this library, including its installation and usage, and provide a
