用于循环打印出相同的结果

时间:2018-06-18 14:07:13

标签: for-loop

为什么这个javascript代码会输出相同的结果?

var myAlerts = [];

  for (var i = 0; i < 5; i++) {
     myAlerts.push(
        function inner() {
            alert(i);
        }
     );
 }

   myAlerts[0](); // 5
   myAlerts[1](); // 5
   myAlerts[2](); // 5
   myAlerts[3](); // 5
   myAlerts[4](); // 5

我期待在1,2,3,4中看到。感觉它与词汇范围有关,但背后的真正原因是什么?

有人可以准确解释这段代码是如何在幕后工作的吗?

1 个答案:

答案 0 :(得分:-1)

这将产生预期的结果。

&#13;
&#13;
 var myAlerts = [];
    
     for (var i = 0; i < 5; i++) {
         myAlerts.push(alert(i));
     }
    
       myAlerts[0](); // 5
       myAlerts[1](); // 5
       myAlerts[2](); // 5
       myAlerts[3](); // 5
       myAlerts[4](); 
&#13;
&#13;
&#13;

通过使用函数inner(),在循环外部调用i时,i被设置为相同的变量

  

允许您声明范围有限的变量   使用它的块,语句或表达式。这与此不同   var关键字,它全局定义变量,或者本地定义变量   整个功能,无论块范围如何。解释为什么   名字&#34;让&#34;被选中可以找到here

您还可以使用:

&#13;
&#13;
var myAlerts = [];
    
     for (let i = 0; i < 5; i++) {
        
         myAlerts.push(
         function inner(){
         alert(i)
         });
     }
    
       myAlerts[0](); // 5
       myAlerts[1](); // 5
       myAlerts[2](); // 5
       myAlerts[3](); // 5
       myAlerts[4]();
&#13;
&#13;
&#13;