这是最一般的闭包,任何教科书都有,函数在执行的时候循环早就运行完毕退出了,alert(i)此时的i你把它理解为引用、指针之类的东西就行了。
解决方案 »
- 如何得到当前活动的栏目不暇接?
- 如何为SVG元素设置背景图片?
- 关于三种继承实现
- XMLHttpRequest 中的responseText 返回值问题
- 为什么在后台设置层的位置显示不出来啊?急死人啊!
- input中"@usrname#"是什么意思?<input type="text" size="24" maxlength="39" name="name" value="@usrname#">
- 特殊的返回按钮!在线等候……
- 这台机器为什么不能执行javascript代码?
- 我初学javascript,我不知道如何到数据库中读取数据
- 急,javascript强制类型转换string -》 int
- 请高人指点,为什么radio是选中状态但是判断checked总是false???
- 请高手解释一段js代码的含义(拆解),谢谢!
只要再用一层闭包,把每次i的值独立出来就可以了
window.onload = function(){
for(var i=1; i < 4; i++){
var id = document.getElementById("a" + i);
(function(i){
id.onclick = function(){
alert(i);//现在都是返回4
}
})(i);
}
}
官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。闭包的特点:
1.作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
2.一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
简单的说,javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。