面试题

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>
原文地址:https://www.cnblogs.com/thelongmarch/p/7651430.html