这是最一般的闭包,任何教科书都有,函数在执行的时候循环早就运行完毕退出了,alert(i)此时的i你把它理解为引用、指针之类的东西就行了。
解决方案 »
- extjs中new Ext.Window有一个autoLoad页面提交问题,求帮忙
- onchange和onfocus事件不能同时使用吗?
- jquery-easyui struts2 整合问题
- 关于多行文本的显示问题
- JS onKeyUp事件响应问题
- [求助]请问JavaScript能实现当网页载入后自动滚屏到指定的锚定处吗?
- 框架中的打印问题
- 如何取出一组checkbox的值,有一个或多个checkbox,checkbox动态生成的,多谢
- 怎么实现淘宝上点击不同的套餐 局部刷新价格的效果 大神给个思路
- javascript如何把一个对象伪装成数组?
- 请高人指点,为什么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允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。