首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js动态绑定事件,无法使用for循环变量i问题

❝小闫语录:我一直在幻想,那些伟大预言家都来自未来,那些畅销小说家都是真实经历过... ❞ 每天不是在写 bug,就是在解 bug 路上~更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选...』 1.问题描述 在一个 for 循环中,我动态给一堆 a 标签绑定 onclick 事件时,发现点击事件不正确。...但是上述代码点击每一个链接总是弹出一个值,而且还是个不正常值。之所以说它不正常,是因为上面我获取到了 5 个标签,正常下标应该到 4 结束,但是总是弹出 5 ????...答:那是因为事件函数是一个匿名函数,此函数会在 for 循环执行之后调用。调用时,发现内部没有定义变量 i ,所以就去外面找一下,发现外层有,就取外层值了,但是为什么是 5 呢?...那是因为 for 循环结束条件是 i 不满足 i<5 ,那么结束后变量 i 值就是 5,匿名函数到外层取值正好取到了它。

3.9K10
您找到你想要的搜索结果了吗?
是的
没有找到

为什么编程里习惯使用 i、j、k 等作为循环变量?

i 可能是 integer 简写,或者是 int 简写。有人说是 iterator 简写,这个有点牵强。早期教材中示例都是以 i、k、j 作为循环变量,后来这样使用成为了一种习惯。...但这种习惯是如何形成呢?...在 1957 年诞生 Fortran 编程中,有一个「I—N 规则」,以字母 I,J,K,L,M,N 六个字母开头变量,如无另外说明均为整型变量,以其它字母开头变量则为实型变量。...虽然对类型支持并不是一开始就有的,但也基本发生在 Fortran 诞生之后几年里。 JS、Python 这样脚本语言没有变量类型,并不是它们低级,而是在它们语言哲学里,没有类型更加简洁方便。...一般情况下,我们都会保持这种语言中哲学纯粹,但有时候我发现我们开发者又很矛盾,例如 JS,它本来是弱类型脚本语言,当我们在享受它简洁方便语言特性时,又搞了一个 TypeScript 出来,希望它也像

96020

【Python】循环语句 ⑥ ( 变量作用域 | for 循环临时变量访问 | 分析在 for 循环外部访问临时变量问题 | 在 for 循环外部访问临时变量正确方式 )

for 循环临时变量循环体外部也可以访问 , 但是不建议这么做 , 代码不够规范 ; 如果需要在外部访问 for 循环临时变量 , 建议将该 临时变量 预定义在 for 循环外部 , 然后在后续所有代码中可以访问该...for 循环临时变量 i # 但是此处可以访问到 临时变量 i print(i) 理论上说 , for 循环 临时变量 是 临时 , 只在 for 循环内部生效 , 在 for 循环外部不应该生效...不建议使用 , 会造成代码不可维护 , 以及其它未知错误 ; 但是从编译规则上 , 这种用法并不报错 , 程序可以跑通 , 写出这种代码就是低级程序员 ; 3、在 for 循环外部访问临时变量正确方式...在 for 循环 之前 , 先定义变量 i , 然后在后面的代码中 , 不管是 for 循环内部 , 还是 for 循环外部 , 都可以使用变量 i ; 代码示例 : """ for 循环临时变量...""" # 先定义临时变量 # 在后面的代码中 # 不管是 for 循环内部 , 还是 for 循环外部 # 都可以使用变量 i i = 0 # i 变量是 for 循环 临时变量, 仅在

32340

python中如何使用for循环_python循环5次

前言:本文简单总结了一下python中for循环使用 ---- 目录 for循环迭代字符串 for打印数字 注意for循环不能迭代数值类型 for循环打印数字的话要借用range函数 for循环可用来初始化列表...简单往列表里添加数据 列表推导式 ---- python中for循环一般用来迭代字符串,列表,元组等。...for循环迭代字符串 for循环可以把字符串里面的元素都依次取出来,自动赋值给变量i然后再执行循环体内代码块 print 里面的end可以设置每个值打印之后输出字符串,默认是换行...for打印数字 注意for循环不能迭代数值类型 eg:int类型,123属于一个数,一个整体,算一个元素 for循环打印数字的话要借用range函数 range函数可以取到一个范围内整数...举个例子 ——range(a,b) 举个例子 ——range(a,b,c) for循环可用来初始化列表 存放大量数据,想要不停接收数据,而且不想用那么多变量时可以用列表推导式

4.7K30

for循环变量闭包

2016-12-12 14:25:09 很多情况我们在for循环里会给一个数组元素定义事件,例如下面代码 for (var i = 0; i < 10; i++) { setTimeout(function...() { console.log(i); }, 100 * i); } 介绍一下,setTimeout会在若干毫秒延时后执行一个函数(等待其它代码执行完毕)。...让我们花点时间考虑在这个上下文里情况。 setTimeout在若干毫秒后执行一个函数,并且是在for循环结束后。 for循环结束后,i值为10。 所以当函数被调用时候,它会打印出 10!...一个通常解决方法是使用立即执行函数表达式(IIFE)来捕获每次迭代时i值: for (var i = 0; i < 10; i++) { // capture the current state...参数 i会覆盖for循环i,但是因为我们起了同样名字,所以我们不用怎么改for循环体里代码。

1.2K20

有效使用 Node.js 事件循环

对于 Node.js 应用程序开发新手而言,作为学习曲线一部分,他们需要了解单线程事件循环工作原理,以及它可能导致意外结果方式。您可以使用本教程中 3 个交互式示例中事件循环进行练习。...事件循环工作原理 传统 Web 服务器是多线程,每个会话通常都有自己线程。该方法很有效,但当会话空闲时,它会要求 Web 服务器分配未被使用资源。...根据惯例,异步函数会将一个 JavaScript Error 对象作为第一个参数传递给回调,然后传递异步函数生成结果。...如果将错误处理添加回代码中,并在调用之间形成复杂逻辑,这很快就会造成回调噩梦,导致代码嵌套多层且难以理解。 结束语 我们快速查看了如何使用 Node.js 单线程事件循环。...使用 Node 库来访问数据库和文件等对象时,了解如何处理异步方法 — 和如何确保代码按一定顺序执行 — 是至关重要技能。

1.6K20

JS那些循环

index 当前处理元素索引 * @param {*} array forEach操作数组 * @param {*} thisArg 执行回调函数时绑定this, 对箭头函数无效 * @returns...return、break、throw随时退出中断, 可以使用continue跳过某次循环const intance = { a: 1, b: 2, c: 3};for (const prop in intance...return、break、throw随时退出中断, 可以使用continue跳过某次循环const iterable = [1, 2, 3];for (const v of iterable) { if...遍历过程中, 后面的迭代会按照最新数组值进行遍历, 已遍历过索引, 不会再重新遍历一遍 a) 新增元素const iterable = [1, 2];for (const v of iterable...js中除了上述三种循环之外, 还有一下循环方式 1、 for语句 2、 do...while语句 3、 while语句 4、 map函数 5、 some函数 6、 every函数以上不做详细介绍

2K10

如何JS 循环中正确使用 async 与 await

在 for 循环使用 await 首先定义一个存放水果数组: const fruitsToGet = [“apple”, “grape”, “pear”]; 循环遍历这个数组: const forLoop...} console.log('End') } 在for循环中,过上使用getNumFruit来获取每个水果数量,并将数量打印到控制台。...在接下来几节中,我们将研究await 如何影响forEach、map和filter。 在 forEach 循环使用 await 首先,使用 forEach 对数组进行遍历。...在 reduce 循环使用 await 如果想要计算 fruitBastet中水果总数。 通常,你可以使用reduce循环遍历数组并将数字相加。...从上面看出来什么 如果你想连续执行await调用,请使用for循环(或任何没有回调循环)。 永远不要和forEach一起使用await,而是使用for循环(或任何没有回调循环)。

4.6K20

#PY小贴士# for 循环定义变量循环外可以用吗?

使用 for 循环时,需要定义变量,大多数时候我们都会用一个 i 来表示: for i in range(10): print(i) 我们知道,在 python 中要获取一个变量值,必须是先给它赋值过...那么这个 i,代码中没有显式赋值,在循环体之外还可以用吗? 答案是肯定。...for i in range(10): pass print(i) 对此你可以理解成:每次循环,都做了一个 i = 赋值。 所以,循环 i 会保留它在循环中最后值。...可以用它来判断循环进行到了哪里: for i in range(10): if i * 3 > 10: break print(i) 不过直接在循环使用循环变量也是有风险,因为循环有可能一次都没有执行...如果确定要在循环使用 i 值,可以在循环之前对 i 做一次赋值。

4K10

如何JS 循环中正确使用 async 与 await

阅读本文大约需要 9 分钟 async 与 await 使用方式相对简单。 当你尝试在循环使用await时,事情就会变得复杂一些。 在本文中,分享一些在如果循环使用await值得注意问题。...在 for 循环使用 await 首先定义一个存放水果数组: const fruitsToGet = [“apple”, “grape”, “pear”]; 循环遍历这个数组: const forLoop...在接下来几节中,我们将研究await 如何影响forEach、map和filter。 在 forEach 循环使用 await 首先,使用 forEach 对数组进行遍历。...在 reduce 循环使用 await 如果想要计算 fruitBastet中水果总数。 通常,你可以使用reduce循环遍历数组并将数字相加。...从上面看出来什么 如果你想连续执行await调用,请使用for循环(或任何没有回调循环)。 永远不要和forEach一起使用await,而是使用for循环(或任何没有回调循环)。

4.3K30

如何在JavaScript中使用for循环

我们将看看for...in循环语句是如何在JavaScript中使用,它语法,它如何工作例子,何时使用它或避免它,以及我们可以使用哪些其他类型循环来代替。...for-in-loop-diagram.png 在对象中使用for…in循环 在JavaScript中使用for...in循环迭代对象时,其迭代键或者属性是对象自己属性(在上面的示例中,由key变量表示...然而,这个输出顺序与初始化对象时创建索引顺序不同。 在数组中使用for…in循环 在JavaScript中使用for...in循环来迭代数组时,在这种情况下,key将是元素索引。...然而,索引可以按随机顺序迭代。 因此,如果我们上面展示for...in循环语法结构中value变量是一个包含五项数组,那么key就不能保证是0到4。一些索引可能会在其他索引之前。...举例来说,下面的语句使用forEach迭代arr变量,并在console中打印value: arr.forEach((value) => console.log(value)); 你也可以访问数组索引

5.1K10

JS】255- 如何JS 循环中正确使用 async 与 await

目前,async / await这个特性已经是stage 3建议 然而,由于部分开发人员对该语法糖原理认识不够清晰,泛滥而不加考虑地随意使用async/await ,可能会我们陷入了新麻烦之中。...addDrinkToCart(chosenDrink); // async call orderItems(); // async call })(); await 语法本身没有问题,有时候可能是使用者用错了...= selectDrink(); await pizzaPromise; await drinkPromise; orderItems(); // async call })(); 或者使用...功能完整度与使用便利度一直是相互博弈,很多框架思想不同开源版本,几乎都是把功能完整度与便利度按照不同比例混合结果。...原文作者给出了 Promise.all 方式简化逻辑,但笔者认为,不要一昧追求 async/await 语法,在必要情况下适当使用回调,是可以增加代码可读性

2.4K40
领券