2013-08-27 72 views
0

控制檯未顯示正確的「人員」。循環中的變量不正確

我的功能如下:

(function() { 
    var people, length = 10; 
    for (people = 0; people < this.length; people++) { 
    setTimeout(function() { 
     console.log(people); 
    }, 1000); 
    } 
})(); 
+0

它是什麼顯示?你期望什麼結果? – Tchoupi

+2

而不是'this.length'不應該是'length' – raser

+0

這是'setTimeout(「console.log(」+ people +「)」,1000);'你想要什麼?或者你想讓它每秒輸出一個數字? – Shomz

回答

2

在你的代碼this.length是不是在你的函數中的局部變量length

this只是全局對象window,所以this.length只是window.length

(function() { 
    var people,length = 10; 
    for (people = 0; people < length; people++) {   
     setTimeout((function(people){ 
      return function() { 
       console.log(people); 
      }; 
     })(people), 1000); 
    } 
})(); 
+0

感謝@xdazz的解釋! +1 – Dave

1

你的意思是像:

(function() { 
    var people,length = 10; 
    for (people = 0; people < length; people++) { 
     (function(index) { 
      setTimeout(function() { console.log(index); }, 1000); 
     })(people); 
    } 
})(); 
+0

+1這是一個更好的方法來做'setTimeout(「console.log(」+ people +「)」,1000);' – Shomz

+0

+1,並且會在7分鐘內接受! :)謝謝@Sudhir – Dave

+0

-1沒有解釋。海報不會了解爲什麼它被打破。 – epascarello