码迷,mamicode.com
首页 > Web开发 > 详细

js在for循环里边定义函数用到自增变量产生的问题

时间:2015-09-30 14:43:23      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:js   for循环   定义函数   自增变量   

笔者最近做了很多的应聘笔试题,其中有一个让我印象特备深刻,关于在一个for循环里边些函数运用到for循环里边定义的变量的问题,废话不多说,先上代码,大家可以看看这段代码最后的结果是什么:

var array=[];//定义一个数组,空的
for(var i=0;i<3;i++){
    array[i]=function(){
        alert(i);
    }
}
array[0]();
array[1]();
array[2]();

初学者可能咋一看,想,这不是很简单吗?依次弹出0,1,2。亲爱的同学们,你可以亲自试一试,结果会出乎你的意料,结果是弹出三次3,这道底是为什么呢?让我们来仔细研究一下。


这段代码在执行的时候首先会新建立一个全局数组array,这是个空数组。在每一次for循环的时候,在进入for循环内部,是不会执行(进入)array[i]的函数体内部的内容的,但是此时会把array[i]加入到全局的作用域链中去。在for循环结束之后(此时i应该等于3了),也就是在函数初始化结束之后,我们现在真真正正的调用一下我们刚刚创建的函数,此时,程序才回去执行函数体内部的东西,要输出i的值,但是此时i的值已经是3了,所以输出来的全是3。


找到了这个问题,我们现在来想想办法解决它吧,可惜,笔者的js功底薄,还木有找到解决数组函数的这个问题的办法。不过,如果是对象(如通过li标签获取的一串文档对象),那我就可以解决他了,如下:

var array=document.getElementsByTagName("li");//获取节点元素,当然不会只有一个接点
for(var i=0;i<3;i++){
    array.index=i;
    array[i].onclick=function(){
        alert(this.index);
    }
}
//点击就可以触发函数执行了


本文出自 “D调小蜗牛” 博客,转载请与作者联系!

js在for循环里边定义函数用到自增变量产生的问题

标签:js   for循环   定义函数   自增变量   

原文地址:http://10271962.blog.51cto.com/10261962/1699471

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!