AJax技术

ajax与jsonp的使用详解(4)

字号+ 作者:H5之家 来源:H5之家 2018-04-22 13:00 我要评论( )

那JS代码呢?我觉得很大一部分同学会这样写: varlis = document.getElementsByTagName(li);for(vari=0;ilis[i].onclick=function(){alert(您/点击了第+i+个li!);} 那么,这样对吗?不对!!!我们来分析一下:页

那JS代码呢?我觉得很大一部分同学会这样写:

varlis = document.getElementsByTagName("li");for(vari=0;i lis[i].onclick=function(){ alert("您/点击了第"+i+"个li!"); }

那么,这样对吗?不对!!!我们来分析一下:页面加载的时候,JS代码会全部执行,也就是上面的for循环在页面加载完就已经执行完了!那,这个i就已经变成了lis.length。也就是说,你在点击li的时候,无论点击第几个,弹出的都是lis.length。

那么,我们应该怎么修改呢?看代码!

varlis = document.getElementsByTagName("li");for(vari=0;i lis[j].onclick=function(){ alert("您/点击了第"+j+"个li!"); } }(); }

区别在哪?明眼人一眼就看穿我们在for循环外面嵌套了一层自执行函数!这种函数套函数的形式,就形成了闭包!

那作用呢?我们刚才强调,闭包的自执行函数会有自己的作用域。在函数里面的代码没有执行的时候,自执行函数中的j是不会被释放掉的!

也就是说,循环转了6次!生成了6个独立的函数空间,每个空间中有自己独立的j变量,所以最终不会出现所有li点击都是lis.length的情况!

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 掌握 Ajax,第 3 部分: Ajax 中的高级请求和响应

    掌握 Ajax,第 3 部分: Ajax 中的高级请求和响应

    2018-04-22 14:02

  • AJAX技巧及问题(如何去除AJAX取过值后IE的缓存_廖佳丽

    AJAX技巧及问题(如何去除AJAX取过值后IE的缓存_廖佳丽

    2018-04-22 12:00

  • php+ajax实现长轮询(Comet)

    php+ajax实现长轮询(Comet)

    2018-04-22 11:19

  • 静态页中利用AJAX实现无刷新页面

    静态页中利用AJAX实现无刷新页面

    2018-04-22 08:00

网友点评