2016-04-16 59 views
0

我正試圖讓我的頭繞過吊裝,我正在通過一個codechool教程(es2015),而我似乎無法讓他們的代碼工作。 (他們只顯示部分代碼,所以接下來是我的版本)爲什麼我無法獲得由吊裝引起的JavaScript

function _myfunc(callback){ 
    callback(); 
} 

function display(names){ 
    for(var i in names){ 
    _mfunc(function(){ 
     console.log(names[i]); 
    }); 
    } 
} 
display(["Sam", "Tyler", "brook", "alex"]); 

顯然var ifor以上循環懸掛,和我應該在控制檯中看到的是alex安慰四倍。但我看到所有四個名字都安慰了。 (然後我打算使用let而不是var來使它工作,但是在它起作用之前我需要制動它)

你能幫我修理/制動代碼,以便我能看到吊裝工作對抗期望的結果。

回答

1

這將破壞你的代碼的一種方法:

function display(names){ 
    for(var i in names){ 
    setTimeout(function() { 
     console.log(names[i]); 
    }, 0); 
    } 
} 
display(["Sam", "Tyler", "brook", "alex"]); 

這裏會發生什麼事是,傳遞給setTimeout回調函數調度運行循環完成後。只要他們全部捕獲到i變量(在循環結束時具有值3),它們都會輸出相同的結果。 PS:我建議不要使用for-in來遍歷數組,但是使用正常的for來代替計數器。

+0

謝謝。通過「使用正常的計數器」,你的意思是'for(var i = name.length - 1; i> = 0; i - )' – relidon

+0

@relidon幾乎 - 只是一個正常*增加*計數器: var i = 0; i zerkms

相關問題