1 <script> 2 for(var i=0;i<10;i++){ 3 setTimeout(function(){ alert(i); },1000); 4 } 5 </script>
释:
setTimeout是一次执行函数,这里是1秒后执行,仅仅执行一次;for(var i=0;i<10;i++),i的每次取值都是执行setTimeout这个函数,并没有执行setTimeout里面的function(即闭包函数),setTimeout里面的function是有setTimeout的定时触动的,也就是1秒后执行,也就是说i从0~9时,一共执行了10次的setTimeout()函数,此时的i的值是10,由于for语句的执行速度远小于1秒,所以,1秒后,由setTimeout()函数定时触动的闭包函数function()开始执行,alert(i);i的值已经是10了,所以相继打印10次i.
区别于(闭包):
1 <script> 2 for(var i=0;i<10;i++){ 3 (function(i){ 4 setTimeout(function(){ 5 alert(i); 6 },1000); 7 })(i) 8 } 9 </script>