首页 > 代码库 > javascirpt 闭包
javascirpt 闭包
前段时间看到一道面试题
<p>P1</p><p>P2</p><p>P3</p><p>P4</p><p>P5</p><p>P6</p>
<script>function clickP(){var a = document.getElementsByTagName("p"); for(var i=0;i<a.length;i++){ a[i].onclick = function(){ alert(i); }; }}clickP();</script>
点击所有P标签弹出提示都是6,如果改进clickP()使点击P提示对应的索引1、2、3....
因为click事件还没触发,循环已经完成,所以无论点哪个P都提示6
/*修改上述方法,点击p弹出对应序号 *创建闭包的一条原则就是:不要引用循环变量! *如果一定要在闭包中引用循环变量怎么办??? *方法是再创建一个函数,将循环变量作为函数参数传入 */ function clickP(){ var a = document.getElementsByTagName("p"); for(var i=0;i<a.length;i++){ var fn = function(n){ a[n].onclick = function(){ alert(n+1); } } fn(i); } } clickP();
javascirpt 闭包
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。