为什么不能直接传递getStar(i)
2 回答
这涉及到javascript中闭包,作用域,引用的概念。
// 这段代码是错误的
// 每个星星节点的点击事件
for(var i=0;i<5;i++){
stars[i].onclick=function(){
getStar(i);
}
}
当前作用域总是能够访问外部作用域中的变量。
onclick函数总是能够访问到 window.onload 函数作用域中的变量i,
但是onclick函数没有复制这个变量,只是引用了。
onload函数执行完后,其中的变量i没有销毁,因为onclick函数引用了,
但是这个时候循环已经执行完毕,i的值变成了5。
当onclick函数触发执行时,获取变量i的值时,自然取到的是5,而不是星星对应的序号。
解决办法:复制一份。
// 每个星星节点的点击事件
for(var i=0;i<5;i++){
!function(index) {
stars[index].onclick=function(){
getStar(index);
}
}(i);
}
利用自执行函数,将i作为参数传入,index成为i的拷贝。
再把index放入onclick函数中即可。
更多关于闭包和作用域的知识,可参考javascript秘密花园文档:
http://www.jb51.net/onlineread/JavaScript-Garden-CN/#function.closures
举报
0/150
提交
取消