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

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

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

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

    PHP的变量赋值

    PHP的变量赋值 这个标题估计很多人会不屑一顾,变量赋值?excuse me?我们学开发的第一课就会了好不好。但是,就是这样基础的东西,反而会让很多人蒙圈,比如,值和引用的关系。...首先,定义变量和赋值这个不用多说了吧 1$a = 1; 2$b = '2'; 3$c = [4, 5, 6]; 4$d = new stdClass(); 四个变量,分别定义了整型、字符串、数组的对象。...这也是我们天天要打交道的四种类型。 然后,变量给变量赋值。...这种情况就是我们所说的引用赋值。当d1发生变化时,d2也会产生变化。 可以这么说:引用赋值就是为原变量建立了一个Windows下的快捷方式或者Linux中的软链接。...最后,轻松一下,引用变量的赋值就和我们给方法传引用参数一样的,使用一个&符号就可以啦!

    3.4K30

    关于for循环中变量定义的位置

    问题 最近跟同事讨论for循环中变量定义在哪里的问题。...同事的意思是说如果照上面那样写因为每循环一次,obj的变量就要在堆栈上分配一段空间,造成浪费。...看2段IL的代码,我们很容易就发现,其实不管是哪种写法,生成的IL几乎是一样的,不同的只是locals init初始化变量的顺序先后的差异。对于第一种写法IL并没有在循环体内去每次都声明obj变量。...但是第二种写法的obj变量必定还保持着最后一次循环所创建的对象。这个对象的释放会被限制,且后面的新人接手你的代码时容易误操作了这个变量,造成不必要的bug。...解惑 @钧梓昊逑 方法内部的临时变量是在进入方法时就在栈上分配的,通过栈顶指针的移动实现变量分配与回收,效率是极高的,对于你说的内存浪费,的确会有,这也是为什么推荐写小方法的原因。

    1.3K30

    变量的解构赋值

    变量的解构赋值.png 变量的解构赋值 数组的解构赋值 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构 本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值...如果解构不成功,变量的值就等于undefined 不完全解构,即等号左边的模式,只匹配一部分的等号右边的数组 对于 Set 结构,也可以使用数组的解构赋值 只要某种数据结构具有 Iterator 接口...对象的属性没有次序,变量必须与属性同名,才能取到正确的值 对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量 真正被赋值的是后者不是前者 与数组一样,解构也可以用于嵌套结构的对象 对象的解构也可以指定默认值...,因此可以对数组进行对象属性的解构 字符串的解构赋值 字符串被转换成了一个类似数组的对象 类似数组的对象都有一个length属性,因此还可以对这个属性解构赋值 数值和布尔值的解构赋值 解构赋值时,如果等号右边是数值和布尔值...用途 交换变量的值 从函数返回多个值 函数参数的定义 提取 JSON 数据 函数参数的默认值 遍历 Map 结构 输入模块的指定方法

    1.9K20

    python变量和变量赋值的几种形式

    变量赋值的几种形式细节 本文解释python中变量赋值的形式,并解释一些细节。后面还有一篇文章解释python中按引用赋值的文章。 python中变量赋值的几种形式。...如果变量名与元素个数不同,则会报错,除非只有一个变量名,这表示将整个序列赋值给这个变量。 如果想要将序列中的元素赋值给不等的变量,可以考虑先将序列进行切片。...这种赋值形式称为序列解包(下文会专门解释这种赋值方式),多出来的元素会全部以列表的方式赋值给最后一个变量名。...: b = "long" a = b python赋值时,总是先计算"="右边的结果,然后将结果按照赋值方式赋值给"="左边的变量。...所以,这里的过程是先将"long"赋值给变量b,再将b赋值给变量a。 因为总是先计算右边,所以交换变量非常的方便。

    2.7K20

    Python变量并列赋值的疑问

    运行结果2 在尝试解释这个问题前,我们先试验一个python变量赋值的小例子: ?...可以发现,python中对变量的赋值实际上是取决于变量对应数值的,当变量的赋值一致时,无论来源如何(初次赋值、再次赋值或者是由其他计算得到),只要赋值相同就都指向同一地址。...当然,a、b和c变量地址一致并不意味着改变其中一个变量,其他变量同步改变,而实际上是指向新的字面值对应地址。所以b从1赋值为2后,地址有所改变,而a、c地址不变,值也不变。...,意味着a, b = b, a 不同于 b, a = a, b; 并列赋值时,先保留等号右侧的取值,再依次赋值给等号左侧的变量。...1"中,先保留等号右侧的取值0和-1,然后分别对左侧的变量进行赋值,即b=0,a[b]=-1(此时a[b]已变为a[0])。

    2.1K40

    MySQL中变量的定义和变量的赋值使用

    前言 MySQL存储过程中,定义变量有两种方式: 1、使用set或select直接赋值,变量名以@开头 例如: set @var=1; 可以在一个会话的任何地方声明,作用域是整个会话,称为用户变量...a/b变量然后相加,通过set语句赋值给c变量。...set语句语法形式set var_name=expr [, var_name=expr]…; set语句既可以用于局部变量的赋值,也可以用于用户变量的申明并赋值。...注意上面两种赋值符号,使用set时可以用“=”或“:=”,但是使用select时必须用“:=赋值” 用户变量与数据库连接有关,在连接中声明的变量,在存储过程中创建了用户变量后一直到数据库实例接断开的时候...set @a = 1; 声明一个名为@a的变量,并将它赋值为1,MySQL里面的变量是不严格限制数据类型的,它的数据类型根据你赋给它的值而随时变化 。

    9.2K41

    Shell变量:Shell变量的定义、赋值和删除

    变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据。脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则。...在 Bash shell 中,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。...这意味着,Bash shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串,这一点和大部分的编程语言不同。...注意,赋值号=的周围不能有空格,这可能和你熟悉的大部分编程语言都不一样。...将命令的结果赋值给变量 Shell 也支持将命令的执行结果赋值给变量,常见的有以下两种方式: variable=`command` variable=$(command) 第一种方式把命令用反引号 `

    4.6K10

    Js解构赋值的应用

    函数add的参数是一个 解构表达式,不是 数组,传入数组参数后,被解构为变量 a,b。...函数的参数是一条解构表达式 {x=0,y=0}, =后面的 {} 实际上是参数的默认值。函数的参数可以设置默认值,是ES6的新特性。顺便举个函数默认值的栗子,方便理解上面的栗子。...)); // [0, 0] console.log( move()); //TypeError: Cannot read property 'x' of undefined 无法解构,导至引用x变量报错...函数使用对象解构参数,可以很方便的设置各种默认值,而且参数顺序没有限制,只要可以成功解构即可,用处还是很大的。...下面列举一些解构赋值的应用场合: //此处谢谢阮一峰兄弟,这些例子我都是抄他的 //快速从返回的数组中取数 function example() { return [1, 2, 3]

    5.8K40

    ES6中的变量的解构赋值, 解放我们的双手,实现变量的批量赋值

    ES6——变量的解构赋值 引言 正文 一、数组的解构赋值 解构失败 不完全解构 默认值 二、对象的解构赋值 三、字符串的解构赋值 结束语 引言 变量的解构赋值, 听起来很复杂, 简单点说可以理解成批量操作变量赋值...:数组的解构赋值 、对象的解构赋值 、字符串的解构赋值 、 一、数组的解构赋值 先来看一下我们平时对很多个变量赋值是如何操作的: let a = 1 let b = 2 let c = 3 let d...,即等号左边的变量与等号右边的相同位置的值一一对应进行赋值。...但是,我们在使用对象的解构赋值的时候必须要注意,等号左边的顺序是随意的, 系统会根据你的变量名, 优先去对象中寻找与你对象名相同的键, 将它的值赋值给这个变量。...,然后放到一个数组中, 赋值给等号左边的变量 结束语 好了, 关于变量解构赋值的知识就将这么多,其实还有一些相关知识,例如数值和布尔值的解构赋值、函数参数的解构赋值等, 但我觉得都不常用,所以就没给大家细讲

    1.3K10

    Python变量:变量的定义、赋值、修改、删除等操作

    Python变量是用于存储数据的标识符。变量可以存储各种类型的数据,例如数字、字符串、列表、字典等。在Python中,变量的定义、赋值、修改、删除等操作非常简单。...以下是Python变量的教程,包括变量的定义、赋值、修改、删除等操作: 变量的定义 在Python中,可以使用任何名称来定义变量,只要满足以下条件: 变量名只能包含字母、数字和下划线。...变量名必须以字母或下划线开头。 变量名不能是Python关键字,如if、while、for等。 变量的定义非常简单,只需要指定变量名,然后使用等号将其赋值给一个值。...在上面的示例中,变量x被赋值为5,变量y被赋值为字符串"Hello, world!"。 变量的赋值 可以通过简单地为变量赋值来修改变量的值。...变量的多重赋值 在Python中,可以使用多个变量同时赋值。例如: x, y = 1, 2 在上面的示例中,变量x被赋值为1,变量y被赋值为2。

    1.5K30

    ES6变量的解构赋值

    ES6(ECMAScript 2015)引入了解构赋值语法,它允许我们从数组或对象中提取值,并将其赋给变量。解构赋值可以让我们更方便地处理复杂的数据结构,简化代码,并提高可读性。...数组解构赋值:使用数组解构赋值,我们可以根据数组中元素的位置,将值分配给对应的变量。...每个变量将按照数组中元素的顺序进行赋值。对象解构赋值:使用对象解构赋值,我们可以根据对象中属性的名称,将属性值分配给对应的变量。...每个变量将根据对应的属性名称进行赋值。默认值:解构赋值还可以使用默认值,在无法从解构的值中获取到对应的值时使用默认值。...由于数组中没有第三个元素,变量c将使用默认值3。嵌套结构和剩余项:解构赋值还支持嵌套结构和剩余项,允许我们在更复杂的数据结构中进行解构操作。

    49740

    ECMAScript 6入门 - 变量的解构赋值

    let x; if ([1][0] === undefined) { x = f(); } else { x = [1][0]; } 默认值引用解构赋值的其他变量 默认值可以引用解构赋值的其他变量...对象的解构赋值 对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。...不能使用圆括号的情况 以下三种解构赋值不得使用圆括号。 变量声明语句中,不能带有圆括号。...第一行语句中,模式是取数组的第一个成员,跟圆括号无关;第二行语句中,模式是p,而不是d;第三行语句与第一行语句的性质一致。 用途 变量的解构赋值用途很多。...解构赋值可以方便地将一组参数与变量名对应起来。

    2.5K70
    领券