【js】关于闭包、let、var的一个考题
题目:
html:
body中有2个div

遍历,给每个div添加点击事件,输出值。
js:
var声明:

效果:
点击每个div后都打印2。

用户点击前,for循环就已经执行完了,是2,onclick里面拿到的就只有2。
var申明的变量i,作用域不仅在for内部,也在for外部。for之后也能使用这个i
换个写法就懂了:

let声明:

效果:
点第一个输出0,第二个输出1。

let的块级作用域,且for中的let变量只对内部有效,每次循环的i都是新的i,不会重复使用。onclick的回调的每个i都是独立的。
如果还是var,使用闭包的方式,也能达到变量独立的效果。

效果:
点第一个输出0,第二个输出1。

for循环时i在变化,但是i已传入闭包,即可独立存在。
divs[i]中的i是function(i)传进来的参数,独立的。
换种写法就懂了:
for内部,调用的是个外部的函数,i变成了参数的传递。

【js】关于闭包、let、var的一个考题的更多相关文章
- 深入理解JS的闭包
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域 ...
- js的闭包概念
一.变量的作用域要懂得闭包,起首必须懂得Javascript特别的变量作用域.变量的作用域无非就是两种:全局变量和局部变量.Javascript说话的特别之处,就在于函数内部可以直接读取全局变量. J ...
- js 的闭包
今天看了关于js闭包方面的文章,还是有些云里雾里,对于一个菜鸟来说,学习闭包确实有一定的难度,不说别的,能够在网上找到一篇优秀的是那样的不易. 当然之所以闭包难理解,个人觉得是基础知识掌握的不牢,因为 ...
- 狗日的js的闭包
一.变量的作用域 要懂得闭包,起首必须懂得Javascript特别的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript说话的特别之处,就在于函数内部可以直接读取全局变量 ...
- 彻底搞清js中闭包(Closure)的概念
js中闭包这个概念对于初学js的同学来说, 会比较陌生, 有些难以理解, 理解起来非常模糊. 今天就和大家一起来探讨一下这个玩意. 相信大家在看完后, 心中的迷惑会迎然而解. 闭包概念: 闭包就是有权 ...
- 三个JS函数闭包(closure)例子
闭包是JS较难分辨的一个概念,我只是按自己的理解写下来,如有不对还请指出. 函数闭包是指当一个函数被定义在另一个函数内部时,这个内部函数使用到的变量会被封闭起来形成一个闭包,这些变量会保持形成闭包时设 ...
- 前端基本知识(三):JS的闭包理解
JS闭包的理解 一.变量的作用域 二.如何从外部读取局部变量 三.什么是闭包 四.深入理解闭包 五.闭包的用途 六.使用闭包注意情况 七.JavaScript的垃圾回收机制 八.一些思考题 一.变量作 ...
- 第28篇 js中let和var
let与var 在js中声明一个变量除了一个var 还有一个let的声明.对于var 在前面的作用域中已经讲过,这次主要说下二者的区别: 在MDN上有这样的一个demo: var list = d ...
- js中闭包的讲解
一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...
随机推荐
- k8s(5)-拓展服务
在之前我们创建了一个部署,然后通过服务公开它.部署只创建了一个Pod来运行我们的应用程序.当流量增加时,我们需要扩展应用程序以满足用户需求. 通过更改部署中的副本数来完成扩展. 1. 拓展部署 这里将 ...
- Kafka集群管理工具kafka-manager的安装使用
一.kafka-manager简介 kafka-manager是目前最受欢迎的kafka集群管理工具,最早由雅虎开源,用户可以在Web界面执行一些简单的集群管理操作.具体支持以下内容: 管理多个集群 ...
- Elasticsearch设置最大返回条数
在Elasticsearch中如果需要做分页查询,我们通常使用form和size实现.form指定从有序哪一行开始,size表示从当前开始读取多少行.但是我们发现查询结果最大只能到10000,这是因为 ...
- 第二篇 Linux 虚拟机操作
下一个虚拟机 Oracle VM 新建一个 空间啥都给大点, 然后下一个Ubuntu镜像 然后打开 试用 try 然后进入后安装就可以用Linux 啦 发现Linux还是看着蛮牛逼,单纯的用于编程 ...
- oracle按时间创建分区表
首先明确分区表和表分区的区别:表分区是一种思想,分区表示一种技术实现.当表的大小过G的时候可以考虑进行表分区,提高查询效率,均衡IO.oracle分区表是oracle数据库提供的一种表分区的实现形式. ...
- tuple的基本使用
常用如下所示: # 元祖,tuple-->不可变,但元祖里面的数据可以变化 # 当元祖只有一个元素时,需加’,‘,否则类型是<class 'int'> # tuple1 = (1) ...
- UI常用接口使用规范
//////////////////////////////////////////////////////////////////////////////////////////////// /// ...
- 最短路(SPFA)
SPFA是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算. 主要思想是: 初始时将起点加入队列.每次从队列中取出一个元素,并对所有与它相邻的点进行修改,若某个相邻的点修改成功,则将 ...
- lower_bound && upper_bound
用lower_bound进行二分查找 ●在从小到大排好序的基本类型数组上进行二分查找. 这是二分查找的一种版本,试图在已排序的[first,last)中寻找元素value.如果[first,last ...
- [math] sagemath
官网首页:http://www.sagemath.org 首页里引出的两个教程 http://www.gregorybard.com/Sage.html http://sagebook.gforge. ...