2016-05-27 67 views
1

在這段代碼中,我添加了一個「下注」的動作,並將其id作爲參數傳遞給一個函數。但是當我稍後調用這個箭頭函數時,this.undoBet的參數等於this.local_bets[this.local_bets.length].bet_id--最後一個在循環內傳遞的bet_idTypescript,箭頭函數內部的函數參數

如何使它在每個箭頭函數內部,this.undoBet將保留在該循環中分配給它的bet_id

for (var k in this.local_bets) { 

    var bet = this.local_bets[k]; 

    if (bet.status == BetStatus.accepted) { 

     // Here bet_id is correct for every "bet" variable 

     this.addUndo("undo_bet",() => { 

      // When calling this later, bet_id equals to one that belongs to the last bet inside this.local_bets 

      this.undoBet(bet.bet_id); 
     }); 

    } 

} 

回答

3

一個常見的JavaScript錯誤。因爲for (var k in this.local_bets) {該索引實際上是最後一個一個到繼續功能執行的時間。

修復

使用let

for (let k in this.local_bets) { 

    let bet = this.local_bets[k]; 

更多

這部分內容的https://basarat.gitbooks.io/typescript/content/docs/let.html

+0

它的工作,謝謝! – ohyou

2

試試這個(另一種局部變量將在每個新的撤銷投注功能作用域) :

this.local_bets 
    .filter(bet => bet.status == BetStatus.accepted) 
    .forEach(bet => this.addUndo("undo_bet",() => this.undoBet(bet.bet_id))); 
+0

儘管我發現函數更加優雅,但我在這裏使用了一個字典,所以它不起作用。還是)感謝你的建議! – ohyou

相關問題