


JavaScript setTimeout uses closure function to print values regularly_javascript skills
This time we use setTimeout to implement an example of printing values sequentially according to time. In fact, in the early days, it was also a mistake I often made, or to achieve this ability, it seems that js is far-fetched, but it is actually my Wrong, haha! I didn’t understand the power of JS. Let’s go directly to the topic! Note that if you use setInterval to implement it, it must be very simple. This time we use setTimeout. Let’s start with the simplest thinking. Then it will Write the following code.
for(var i = 0; i < 5; i++) { setTimeout(console.log(i),i*1000); }
Although this code prints the value of each i in sequence, 0, 1, 2, 3, 4. However, the execution time does not play a role. Why? Because console.log() is the execution call of the method , after calling this method, it is executed immediately!, so it does not achieve our expected purpose.
Then let’s continue looking at the following piece of code
for(var i = 0; i< 5; i++ ){ setTimeout(function(){ console.log(i); },i*1000); }
Here we use an anonymous function that contains the printed console.log to print i, so the value of i is shared. Before the first setTimeout is executed, the for loop has been executed, and the final i = 5 , so i will be printed four times. In fact, we have two solutions. Let’s look at the first one first:
var j = 0; function abc(){ console.log("j = "+j); j++; } for(var i = 0; i < 10; i++ ){ setTimeout(abc,i*1000) }
Here we have another global variable to store the value. Every time the function abc is executed, j is added once, so when setTimeout is executed, the abc function will be called, so the expected effect will be achieved, but here j is A global variable, global variables will cause problems such as easy to change its value or naming conflicts. To implement the second method, we introduce the closure function again. Because of the closure function, every time it is created, there will be its own space to store the unique value. So using this thinking. We write the code as follows.
for(var i = 0; i < 10; i++ ) { (function(x){ setTimeout(function() { console.log(x) },x*1000) })(i) }
We pass the value of i each time the for loop is executed to different created closure functions, so that the value of i stored in each closure function will be different. So we achieve what we want Result.
ps: Use closure to simply encapsulate setTimeout
When writing js scripts, some spelling functions are often used, such as calling setTimeout
var msgalert="test"; function TestAlert(msg) { alert(msg) } $(document).ready(function () { $("#btnCancel").click(function (e) { setTimeout("TestAlert("+msgalert+")",1000); }); })
I checked for a long time, why the dialog box doesn’t pop up. After checking for a long time, I discovered that a pair of single quotes
were missing.$(document).ready(function () { $("#btnCancel").click(function (e) { setTimeout("TestAlert('"+msgalert+"')",1000); }); })
This way of writing is prone to errors, and it is not easy to detect errors. If you use closures, you can completely avoid it. Rewrite it as follows
var msgalert="test"; function dalayAlert(msg ,time){ setTimeout( TestAlert(msg), time ); } function TestAlert(msg) { alert(msg) } $(document).ready(function () { $("#btnCancel").click(function (e) { dalayAlert(msgalert,1000) });
Due to the use of closures, it is much simpler and error checking is also easy

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



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.

Frequently Asked Questions and Solutions for Front-end Thermal Paper Ticket Printing In Front-end Development, Ticket Printing is a common requirement. However, many developers are implementing...

The article discusses effective JavaScript debugging using browser developer tools, focusing on setting breakpoints, using the console, and analyzing performance.

There is no absolute salary for Python and JavaScript developers, depending on skills and industry needs. 1. Python may be paid more in data science and machine learning. 2. JavaScript has great demand in front-end and full-stack development, and its salary is also considerable. 3. Influencing factors include experience, geographical location, company size and specific skills.

The article explains how to use source maps to debug minified JavaScript by mapping it back to the original code. It discusses enabling source maps, setting breakpoints, and using tools like Chrome DevTools and Webpack.

This tutorial will explain how to create pie, ring, and bubble charts using Chart.js. Previously, we have learned four chart types of Chart.js: line chart and bar chart (tutorial 2), as well as radar chart and polar region chart (tutorial 3). Create pie and ring charts Pie charts and ring charts are ideal for showing the proportions of a whole that is divided into different parts. For example, a pie chart can be used to show the percentage of male lions, female lions and young lions in a safari, or the percentage of votes that different candidates receive in the election. Pie charts are only suitable for comparing single parameters or datasets. It should be noted that the pie chart cannot draw entities with zero value because the angle of the fan in the pie chart depends on the numerical size of the data point. This means any entity with zero proportion

In-depth discussion of the root causes of the difference in console.log output. This article will analyze the differences in the output results of console.log function in a piece of code and explain the reasons behind it. �...
