Solution to the problem of var in for loop

Solution to the problem of var in for loop

Preface

var is a way to declare variables in ES5. I have always heard that when declaring variables with var, there is a problem of loop variables leaking to global variables, but I always can't figure out the impact of this "global". In addition, it is not clear when the output result is an increasing/decreasing value and when the output is the same value.

Problem reproduction

for (var i = 1; i <= 5; i++) {
  setTimeout(function timer() {
    console.log(i)
  }, i * 1000)
}

Expected result: 12345

Print result: 66666

Solution

Closures

for (var i = 1; i <= 5; i++) {
    (function (j) {
        setTimeout(function timer() {
            console.log(j)
        }, j * 1000)
    })(i)
}

setTimeout third parameter

for (var i = 1; i <= 5; i++) {
   setTimeout(
       function timer(j) {
           console.log(j)
       },
       i * 1000,
       i
   )
}

Use let to define i

for (let i = 1; i <= 5; i++) {
    setTimeout(function timer() {
        console.log(i)
    }, i * 1000)
}

let

Regarding let, remember: the current i is only valid in this loop, and i in each loop is actually a new variable.

The JavaScript engine will remember the value of the previous loop internally, and when initializing the variable i of this loop, it will perform calculations based on the previous loop.

In addition, the for loop has another special feature, that is, the part that sets the loop variable is a parent scope, and the loop body is a separate child scope.

for (let i = 0; i < 3; i++) {
let i = 'abc';
console.log(i);
}
//abc
//abc
//abc

Summarize

This is the end of this article about how to solve the problems encountered when using var for loop. For more information about var for loop problems, please search for previous articles on 123WORDPRESS.COM or continue to browse the following related articles. I hope you will support 123WORDPRESS.COM in the future!

You may also be interested in:
  • js for loop, why must we add var to define i variable
  • The difference between var and let in jQuery for loop
  • Detailed explanation of the difference between let and var in es6 for loop

<<:  Explore the truth behind the reload process in Nginx

>>:  Detailed explanation of the code for querying data of a certain day, month, or year in MySQL

Recommend

Docker compose custom network to achieve fixed container IP address

Due to the default bridge network, the IP address...

Notes on using the blockquote tag

<br />Semanticization cannot be explained in...

Difference between src and href attributes

There is a difference between src and href, and t...

Implementation of effective user groups and initial user groups in Linux

First check the /etc/group file: [root@localhost ...

Linux uses stty to display and modify terminal line settings

Sttty is a common command for changing and printi...

Common JavaScript memory errors and solutions

Table of contents 1. Timer monitoring 2. Event mo...

Detailed examples of how to use the box-shadow property in CSS3

There are many attributes in CSS. Some attributes...

How to start a transaction in MySQL

Preface This article mainly introduces how to sta...

Nginx uses the Gzip algorithm to compress messages

What is HTTP Compression Sometimes, relatively la...

Two ways to start Linux boot service

Table of contents rc.local method chkconfig metho...

Detailed explanation of how to reduce memory usage in MySql

Preface By default, MySQL will initialize a large...

UDP simple server client code example

I won’t go into details about the theory of UDP. ...

Vue integrates Tencent TIM instant messaging

This article mainly introduces how to integrate T...

A practical record of encountering XSS attack in a VUE project

Table of contents Preface Discover the cause Cust...