<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="探讨js闭包传参和事件的循环绑定的例子" id="card1">
<p> 游客</p><p>
标题:探讨js闭包传参和事件的循环绑定的例子<br/>
正文:<br/>
昨天一个关于javascript的面试题，按常理循环绑定事件，但是得到的结果却不是想要的。 <br/>代码如下:<br/>&amp;lt;a href=&quot;#&quot;&amp;gt;text&amp;lt;/a&amp;gt; <br/>&amp;lt;br&amp;gt; <br/>&amp;lt;a href=&quot;#&quot;&amp;gt;link&amp;lt;/a&amp;gt; <br/>&amp;lt;script&amp;gt; <br/>var as = document.getElementsByTagName('a'); <br/>for ( var i = as.length; i--; ) { <br/>   as[i].onclick = function() { <br/>      alert(i); <br/>      return false; <br/>   } <br/>} <br/>&amp;lt;/script&amp;gt; <br/><br/>1.这个代码点击链接弹出的i都是-1,这是为啥呢？ <br/><br/>简单来说就是函数变量作用域问题，如果把function() { alert(i); return false; } 当做一个函数 a();a()内部未定义变量i,但是内部使用了，于是向外查找,找到for循环里定义的i，点击事件是for循环完毕后才开始执行的，执行完毕后i的值已经变成-1；所以每次弹出的都是-1； <br/><br/>2. 2个参数的for循环也不常见！疑惑？ <br/><br/>　　for（语句1，语句2，语句3）{ <br/><br/>　　　　//todo <br/><br/>　　} <br/><br/>a.for循环条件 <br/><br/>通常说语句1、语句2、语句3都是可选的。 <br/><br/>b.语句 2： <br/><br/>　　通常语句 2 用于评估初始变量的条件。 <br/><br/>　　语句 2 同样是可选的。 <br/><br/>　　如果语句 2 返回 true，则循环再次开始，如果返回 false，则循环将结束。 <br/><br/>　　提示：如果您省略了语句 2，那么必须在循环内提供 break。否则循环就无法停下来。这样有可能令浏览器崩溃。 <br/><br/>c.关于 i--判断： <br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1223&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1223&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1223&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1223&amp;Page=3">[3]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1223&amp;Page=5">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=1223">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=1223">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>