let 和 var

// 循环中绑定事件,在事件内使用循环每次的计数器var ali = document.querySelectorAll(".list li");for(var i=0;i<ali.length;i++){ali[i].onclick = function(){console.log(i);  //6}}// 循环执行时没有变量去保存i的值,点击事件也没执行,var声明的变量在全局范围内有效// i的值会随着循环的i++被一次次覆盖// 拿不到所有的i,i会被覆盖直到循环结束此时i为6// 相当于// var i=0;全局的i    点击时循环已经结束 i是全局的每次i++后,i的值会改变{ali[i].onclick = function(){console.log(i);    //6}i++;}// 解决方法  // 方法一// let触发了块级作用域,实现了作用域的嵌套for(let i=0;i<ali.length;i++){// let i=0;ali[i].onclick = function(){console.log(i);}}// i是let声明的,当前的i只在本轮循环内有效本轮循环结束这个i就无效了再循环会重新声明,但是js内部会// 暂时记录每轮循环这个i的值,在下一轮循环重新声明i时就是在上一轮循环的值得基础上在i++得到// 所以每一轮循环的相当于重新声明一个新的变量i,i的值会暂存本轮循环内,// 为神魔35行所在的作用域能拿到i?// 因为形成了闭包,所以点击时(函数执行打印)拿到事件函数自身定义作用域中的变量,也就是每次// 循环重新声明的i// 相当于// 第一次循环{let i=0;ali[i].onclick = function(){console.log(i);}i++;},// 第二次循环{let i=1;ali[i].onclick = function(){console.log(i);}i++;}.....// 又let声明变量时会触发块级作用域,形成了for执行体的花括号为一个作用域嵌套的是点击事件函数花括号的作用域,// 形成了闭包环境(作用域嵌套),闭包环境下 函数在执行时,可以拿到自身定义作用域中的变量,也就是每次// 循环重新声明的i// 所以44行点击事件函数执行可以拿到42行的i,// 方法二            匿名函数实现作用域的嵌套,形成闭包环境for(var i=0;i<ali.length;i++){;(function(ii){ali[ii].onclick = function(){console.log(ii);}})(i);}// 方法三for(var i=0;i<ali.length;i++){ali[i].onclick = (function(ii){return function(){console.log(ii);}})(i);}
 // #闭包// 1. 概念//     - 通过将作用域嵌套实现将局部变量进化成私有变化的环境,叫闭包//     - 环境,不是固定写法//         - 作用域嵌套// 2. 原理//     - 函数的定义作用域和执行位置的关系//         - 函数在执行时,可以拿到自身定义作用域中的变量// 3. 特点//     - 占内存//     - 在外部作用域使用内部作用域的变量//     - 低版本浏览器造成内存泄漏//4.闭包类似//   计算机的垃圾回收机制//        - 可以暂存到回收站,如果需要再次使用,可以继续读取,确定不用后,再做删除//         - 内存的垃圾回收//             - 不用即释放闭包环境:有作用域嵌套,,内部作用域可以使用外部作用域的变量,,(可以拿到a中局部变量b)内部作用域被返回出来在外部执行  (在一个函数a外边)// 原理:- 函数在执行时,可以拿到自身定义作用域中的变量// function box(){//     var a=10;//     return function(){//         a++;//         console.log(a);//     }// }// var f = box();// f();       // 11// f();       // 12// f();       // 13// 也可以这么理解// 在一个函数(box)的外部能够访问该函数局部变量的函数(return 出去的函数)// 在函数box外,执行box函数内的函数(return 出去的函数),(return 出去的函数)可以拿到变量a// #let关键字声明变量// let会触发块级作用域,花括号就是一个作用域// 不能重复声明同一个变量

let声明实现循环中的事件可拿到每个计数器的值asdsa相关推荐

  1. JQuery在循环中绑定事件的问题详解

    JQuery在循环中绑定事件的问题详解 有个页面上需要N个DOM,每个DOM里面的元素ID都要以数字结尾,比如说 ? 1 2 3 <input type="text" nam ...

  2. js在for循环中绑定事件

    // 控制准运证信息的展开for (var i=0; i<=res.info.navicerts.length; i++) {(function(i) {$('#collapse-btn'+i) ...

  3. 【debug】使用lambda在循环中传参时,参数总为同一个值

    发现问题: 当我使用PyQt5在写一个文本处理小工具时,需要在调用事件时传入参数,于是想到了lambda函数,代码如下: def radiotext(self):'''文档输出格式选择功能'''# 自 ...

  4. c语言for循环加法,BigDecimal 在for循环中相加注意事项

    public static void main(String[] args) { BigDecimal bigDecimal = new BigDecimal(1); for (int i = 0; ...

  5. php的foreach循环执行过程分析以及循环中执行unset()的一些问题

    文章目录 一.前言 二.foreach的执行过程 1.关于版本不同的foreach变化 2.关于引用计数 3.探寻foreach的运行过程 三.foreach中执行unset()的问题 1.当我们是为 ...

  6. js中如何得到循环中的点击的这个id_Js篇面试题9请说一下Js中的事件循环机制

    虽互不曾谋面,但希望能和您成为笔尖下的朋友 以读书,技术,生活为主,偶尔撒点鸡汤 不作,不敷衍,意在真诚吐露,用心分享 点击左上方,可关注本刊 标星公众号(ID:itclanCoder) 如果不知道如 ...

  7. js中的事件循环和宏任务和微任务的理解

    参考许多大神的文章,写下自己的理解 事件循环: 说到事件循环就得谈到js中同步和异步的执行顺序 1.javascript将任务分为同步任务和异步任务,同步任务放到主线中,异步函数首先进行回调函数注册. ...

  8. 【nodejs原理源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick

    [摘要] 官网博文翻译,nodejs中的定时器 示例代码托管在:http://www.github.com/dashnowords/blogs 原文地址:https://nodejs.org/en/d ...

  9. 浏览器中的事件循环机制

    浏览器中的事件循环机制 网上一搜事件循环, 很多文章标题的前面会加上 JavaScript, 但是我觉得事件循环机制跟 JavaScript 没什么关系, JavaScript 只是一门解释型语言, ...

最新文章

  1. Google发布“多巴胺”开源强化学习框架,三大特性全满足
  2. 港科大开源 | 基于事件的双目视觉里程计
  3. 【深度学习】生动分析半监督学习与负相关学习算法
  4. matlab 文件路径问题
  5. lodop指定打印机打印_GitHub - xtjatswc/formext: 基于Lodop封装的打印框架,支持表单、报表配置。...
  6. 微软 SQL Server 2019 将免费支持 Java;Rancher Labs获2500万美元融资;腾讯云进军日本市场……...
  7. java hasset 顺序_java集合排序问题
  8. java类中自定义函数的调用_关于方法:自定义类中对函数的未解析引用
  9. java中socket类_Java中的Socket的用法
  10. 【redis】redis实用Utils
  11. ALinq 让Mysql变得如此简单
  12. 小车故障灯亮显示大全_车辆故障灯亮了,还能继续行驶吗?该怎么做?
  13. gbq6什么软件能打开_各种格式的文件用什么软件打开
  14. 解决Docker容器中无法使用vim命令
  15. 蓝牙耳机能链接计算机,蓝牙耳机,小编教你蓝牙耳机怎么连接电脑
  16. 深度学习项目:男女性别识别【附完整源码】
  17. angular 部署的项目自定义访问路径,不使用root根目录的配置
  18. EfficientNet B0 训练 Standford 汽车图片分类(对比ResNet34)
  19. 解决运行web项目问题:localhost: 8080 is already in use
  20. 用python写九九乘法表(用format格式极其简单)

热门文章

  1. 罗振宇吴声被群殴的真相
  2. 数据量大如何优化?如何优化数据?
  3. IntelliJ IDEA 多个独立工程管理
  4. excel 进行二叉树_专题:二叉树的遍历(迭代)
  5. CTA-OS-数据开关
  6. vue+django前后端分离之hippo后端初始化
  7. 鼎阳SDS6204示波器的EPICS IOC调试
  8. c#音频运行格式转换( .amr => .mp3 )
  9. pycharm导入库时红色波浪线的解决方案
  10. 虚拟资源项目有哪些,如何售卖虚拟资源躺赚及虚拟资源变现