先说,我没怎么学过JS只是之前给网站做特效的时候用jQuery顺带学了点基本语法。
有人问我这个问题
<ul id="List">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
<script>
var list_obj=document.getElementsByTagName('li');
for(var i=0; i<=list_obj.length;i++)
{
list_obj[i].οnclick=function()
{
alert(i);
}
}
</script>
为什么点击之后输出全是5。
按照c++的理解,加上网上找的闭包的概念我强行解释下。对不对再说(至少我现在觉得是对的)。
list_obj[i].οnclick=function()
按照c++的理解,这句话其实等于把function的函数指针挂在onclick上。
这个写法,应该是在界面加载的时候便调用Script中的内容。
考虑到闭包的定义,即函数中的成员在没有被回收之前均留在内存中,也就是说i是留在内存中的。而我们的alert调用都是调用的内存中的i,因此输出都是5。
这个类似传值还是传引用的问题。
也不知道对不对,网上的闭包概念实在看不懂,谁有好的给我推荐下,或讲解下,让小弟长点姿势!万谢!