解决方案 »
- WEB开发
- 【求助】jquery getScript问题
- 一段对象javascript的代码,取值有问题,希望高手指教???
- 问个网络方面的问题,跪求回答了,叩首中..
- 实现像163那样的鼠标延迟感应特性,请教不用层,用table能怎么实现,js高手来拿分吧?
- js调用.net服务器端代码参数传递问题?
- 一个url在一个form中,击这个url的时,此form中的控件的值也被提交么?多谢!
- 求一js函数!
- 如何访问文本框的readonly属性?
- 我在一个TextArea里输入文字,如何得到光标的坐标呢。
- 关于easyUI datagrid 一列中多个checkbox的问题
- 如何做到这样的效果?textarea框选中状态,光标在最后
for( var i=0; i<pAry.length; i++ ) {
...
等价于:
var i;
for( i=0; i<pAry.length; i++ ) {
...解决方法是用有独立作用域的函数来保护变量,也就是你说的闭包了,这算是闭包的作用之一:
for( i=0; i<pAry.length; i++ ) {
(function(i){
pAry[i].onclick = function() {
alert(i);
}
})(i);
}
function init() {
var pAry = document.getElementsByTagName("p");
for( i=0; i<pAry.length; i++ ) {
pAry[i].onclick = (function(input){
return function() {
alert(input);
}
})(i);
}
}
pAry[i].onclick = function() { alert(i); 这一行的作用并不是规定点击第几个p就弹出几,而是规定:不论点击哪个p,都弹出函数 init 中的变量 i 。当你点击任意一个p弹出变量 i 的时候,这个时候 i 早已经变成了5即pAry.length的值(实际上,for循环完毕后 i 就已经变成5了),所以会弹出5。