zoukankan      html  css  js  c++  java
  • JavaScript——for循环中使用var、let定义变量的区别

    for 语句用于创建一个循环,它包含了三个可选的表达式,这三个表达式被包围在圆括号之中,使用分号分隔。

    for(){},整体是一个块级作用域。

    使用以下代码举例:

    for(var i = 1;i<=3;i++){
      setTimeout(function(){
        console.log('for——var',i);
      },1000)
    }

    此时会产生两块作用域,

    第一层:for循环

    第二层:定时器,每隔一秒执行一次

    使用var的情况:

    var是全局声明变量,

    定时器内打印 变量 i,此时会访问父级作用域 for循环或者全局中的 i

      

    画一张图方便理解,

    当 i =4的时候,全局中的 i 已经自增为4了, 虽然该条件下的定时器函数不会执行,但是定时器函数可以访问到全局的变量 i 

    所以此时会输出 4

    使用let的情况:

    当 i 自增为4,定时器不会执行,

    所以此时会输出1、2、3


    demo

    用var声明变量之后,手写块级作用域

    for(var i = 1;i<=3;i++){
                 (function(str){
                        setTimeout(function(){
                            console.log('str',str);
                 },1000)
      })(i)
    }

    1. 新增一个立即执行函数,产生了函数作用域

    2. 每次循环,传递一个 i 参数进来,计时器函数可以访问到立即执行函数里面的 i 参数

  • 相关阅读:
    Mysql 怎么限制 IP 访问?
    LA2965 n个数中选出最多个数异或和为0
    UVALive 2678 大于s的最短子序列和
    UVA 1193 区间相关(greedy)
    UVA 11992 线段树
    UVA 1400 线段树
    NBUT 1120 线段树
    最大连续区间和的算法总结(转)
    hiho 1015 KMP
    hiho#1128 : 二分·二分查找
  • 原文地址:https://www.cnblogs.com/xiaoyui/p/13884658.html
Copyright © 2011-2022 走看看