<script type='text/javascript'>
function test() {
for (var i = 0; i < 5; i++) {
setTimeout('alert(i)',1000);
}
}
test();
</script>
我想问下为什么这么写,不会弹出0,1,2,3,4?而会报i没有定义。JavaScriptsetTimeout函数
function test() {
for (var i = 0; i < 5; i++) {
setTimeout('alert(i)',1000);
}
}
test();
</script>
我想问下为什么这么写,不会弹出0,1,2,3,4?而会报i没有定义。JavaScriptsetTimeout函数
解决方案 »
- JS 函数调用 按钮事件 高手过来看看,不是你想的那么简单
- js 可以动态创建类吗?
- 求助,一个JavaScript的基本问题!
- javascript和jsp有何区别和联系,理解的请用通俗的语言描述一下,我是新手,学哪一个?
- 高手请进 在firefox中函数出错的问题
- 如果正确判断字符输入的正确性
- 关于数组形式的表单计算,请高手帮我转成多行可计算的表单!
- 有没有办法在WEB页中作出像COMBO BOX(组合窗口式菜单)的效果啊?用DW行吗?
- 分全给方案最佳者,解决再回100!还是关于点击进行相关隐藏问题!!!郁闷啊
- 一个入门级的问题求教!
- 如何利用javascript,使得点击某个超链接时,能读取某文本框的内容,并加入超链接后的?后的参数中(不使用按钮,不提交表单)
- js或者jquery如何获得 p标签里的光标位置
for (var i = 0; i < 5; i++) {
setTimeout('alert('+i+')',1000);
}
}
test();
for (var i = 0; i < 5; i++) {
setTimeout(function(){
alert(i)
},1000);
}
}
test();你这样写就可以访问到i了,但是仍然有问题,访问到的i都是5。
因为等1000毫秒后,循环已经执行完了,此时i就是等于5。function test() {
for (var i = 0; i < 5; i++) {
(function(i){
setTimeout(function(){
alert(i)
},1000);
})(i)
}
}
test();最终,改成这样就可以了..
因为中间那个匿名函数将循环中的i保存在它的上下文对象里了。setTimeout里的函数通过闭包访问到这个i。抱歉啊,水平有限,自己都感觉解释的不是很通俗。楼主理解不了的话。建议先记住几种方案,解决问题。
然后多理解下javascript的闭包,作用域链,函数上下文对象等概念。
for (window.i1 = 0; window.i1 < 3; window.i1++) {
setTimeout('alert(window.i1)',1000);
}
}
test();其他问题不管 为什么不能访问 你看这个代码