今天工作需要做一个循环绑定 所有 标签,做出来后全都绑定了最后一个,很是纳闷, 后来到网上一查竟然少了一个叫闭包东东,那什么叫闭包呢!
按照面向对象的JAVA语言的理解可以解释为:js循环动态绑定带参数函数中的参数,其实相当于java中的引用传递,而非值传递。传递进来的引用只相当于一个指针,指向的是一个内存地址,这个内存地址存放的才是具体的值,而外面的循环会不断的修改这个存放地址中的值,所以最后循环结束之后,参数的值只能找到最后一个。
知道了原因就很好解决了。New一个新的“函数类”。
Code
function selBind(){
var selectObj = document.getElementsByTagName("select");
var len = selectObj .length;
for (var i=0;i
{
var myBind= new bind( "select"+i ); //解决闭包问题,new一个新的函数类
selectObj[i].onchange = myBind.bindObj;
}
}
function bind(para) //解决动态绑定闭包问题要用到函数
{
this.bindObj = function()
{
alert(para); //可以调用相应的函数;
}
}
selBind(); //测试
参考网站: http://www.jb51.net/article/25268.htm