javascript中for循环的原理原理的一个小例子

<body>
<input type="button" />
<input type="button" />
<input type="button" />
<input type="button" />
</body>
<script type="text/javascript">
var aBtn=document.getElementsByTagName("input");
for(var i=0;i<aBtn.length;i++)
{
aBtn[i].onclick=function ()
{
var num=i;
alert(num);
}
}
</script>

结果是,点击每一个按钮都弹出4。
弹出3我尚且能理解,但是这个4是从哪里来的?i最大不就是3吗?
而且,本来我的预期是点击四个按钮分别弹出0123,为什么不能实现呢?
i等于4的时候不是就不符合条件从而不执行语句了吗啊?为什么还是给num赋值了?

  这个涉及到闭包的知识,你应该是初学者,我就讲浅一点吧

  在for循环里,实际上的执行顺序是,依次给四个input绑定事件,但该事件函数并未得到初始化,然后递增i变量,并将i变量留在内存中,所以,循环之后,i的值是退出循环的条件,也就是4,而接下来才开始初始化各个input标签的事件函数,var num=i这时的i已经是4了。

  如果要实现你想要的效果的话,可以这样子

     var aBtn=document.getElementsByTagName("input");
        for(var i=0;i<aBtn.length;i++)
        {
            (aBtn[i].onclick=function ()
            {
                    var num=i;
                    alert(num);
            })(i)
        }

  加了括号之后,事件函数就会立即初始化,而不是等循环退出才开始

追问

终于明白了!
还想问一个小问题,如果回答起来不方便就算了。就是你答案里面,代码是怎么写成那种带格式的形式的?

追答

  在编辑器里打好,然后在右上角代码那里选择JavaScript,就可以了,我这段代码图方便不是向左靠齐的-_-|

温馨提示:内容为网友见解,仅供参考
无其他回答

JS for 循环
在JavaScript中,for循环是一种常用的控制结构,用于重复执行一段代码直到满足特定条件。以下是一个使用for循环的例子,它涉及到DOM操作,主要是动态检查并管理元素的样式状态:假设有一个HTML结构,包含一个id为'dp'的元素数组,我们想要根据元素在页面上的位置进行处理。首先,通过for循环,变量i从0开始递...

js中for语句
示例代码如下:```javascript for (let i = 0; i < 5; i++) { console.log(i);} ```在这个例子中,`let i = 0;`是初始化表达式,它初始化了一个名为`i`的变量,并将其值设置为0。`i < 5;`是条件表达式,它决定了循环是否继续执行。只要`i`的值小于5,循环就会继续。`i++`是...

js中for循环语句
for (let i = 1; i <= 5; i++) { console.log(i);} ```在这个例子中,`let i = 1`是初始化表达式,`i <= 5`是条件表达式,`i++`是迭代表达式。循环开始时,`i`被初始化为1,然后检查`i`是否小于或等于5。如果是,就打印`i`的值,然后将`i`增加1(`i++`是`i = i + ...

js中for循环的用法
在这个例子中,`let i = 1;` 是初始化表达式,用于初始化计数器`i`为1;`i <= 5;` 是条件表达式,只要`i`小于或等于5,循环就会继续;`i++` 是更新表达式,每次循环结束时都会执行,用于将`i`的值增加1。这样,循环体会被重复执行5次,每次打印出`i`的当前值。

for的意思和用法(最好有例句)
javascript FOR i = 1 TO 5 PRINT i END FOR 在这个例子中,"i"是目标变量,"1"是开始值,"5"是结束值。循环体内的代码会执行5次,分别打印出数字1、2、3、4、5。详细解释:FOR语句是编程中非常基础且重要的一个语句。它的主要作用是根据设定的条件,重复执行一段代码。这在需要多次执行相同...

for循环的代码循环
解释:下面的例子定义了一个循环程序,这个程序中 i 的起始值为 0。每执行一次循环,i 的值就会累加一次 1,循环会一直运行下去,直到 i 等于 10 为止。注释:步进值可以为负。如果步进值为负,需要调整 for 声明中的比较运算符。 var i = 0for(i = 0; i <= 10; i++) { document.w...

JS中for循环闭包问题如何解决
而我的简单理解就是:一个函数中嵌套了另一个函数,里面的一个函数要访问外层函数的变量,所以就形成了一个闭包,闭包即是为了保留某些局部变量的值而存在的。然而javascript 有些常见的闭包问题,比如上面的例子,那么我们来看看怎么解决这些问题。解决方案一:加一层闭包,i 以函数参数形式传递给内层函数...

怎么用javascript实现n个数的比较,按照从小到大排列输出 用两个for语 ...
冒泡排序的原理是这样的,比方说有五个数字54321,要按从小到大排列;首先比较前两个,就是5和4,如果第一个小于第二个,不做操作,如果第一个大于第二个,那么交换二者的位置,即变成45321,然后比较第二个和第三个,交换位置,变成43521,然后第三个和第四个,第四个和第五个,这样一次循环下来...

在javascript中for,while,do while循环有什么区别?
简单来说,区别是,不管条件是否符合,do while都会先执行一次大括号里的代码,而while不会 举例来说 。。。(var i=5;i<=4;i++){document.write(i)} 。。。这段代码(i的初始值大于条件指定的4),在while里不会执行,在do while里会执行一次 代码可能不标准,但是意思你总懂了吧 ...

JavaScript里面的死循环是什么意思?能否举个简单例子?谢谢
死循环就是循环条件一直为true,程序进入循环体的代码执行后就不能终止。以下是事例,变量i 一直小于1.for(i=0;i<1;i--){ alert("msg");}

相似回答