2017-08-29 68 views
-1

定義我有一個函數currentPlayer如下:本地變量沒有在功能

function currentPlayer(players) { 
    return players.findIndex(player => player.current) || 0; 
} 

我想如下使用此功能在減速:

export function players(players = [], action) { 
    players = players.slice(); 
    switch (action.type) { 
    ... 
    case DELETE_PLAYER: 
     const currentPlayer = currentPlayer(players); 
     if (currentPlayer === action.index) { 
     players = switchNextPlayer(players, currentPlayer); 
     } 
     players.splice(action.index, 1); 

    } 
    return players; 
} 

在運行該代碼,我收到以下錯誤:

ReferenceError: currentPlayer is not defined

如果我按如下方式更改變量名稱,代碼將起作用:

const currentPlayerIndex = currentPlayer(players); 

我認爲變量currentPlayer將在減速功能的作用域。這裏發生了什麼?

+1

'const currentPlayer = currentPlayer(players);'注意行中的3個名字 – Ryan

+0

該函數正在被新的'currentPlayer'綁定所掩蓋,而這個綁定在你評估它時還沒有被初始化,所以你最終得到了一個參考錯誤 – MinusFour

回答

1

const聲明被解釋爲之前的的初始化表達式。因此,您的本地範圍首先獲得自己的currentPlayer符號,然後評估初始化表達式。因此,在初始化表達式中,currentPlayer引用了新聲明的本地符號,而不是函數。

+1

即,如果它是'let'而不是'const',則上述表達式將被分解爲:'let currentPlayer; currentPlayer =當前播放器(播放器);' – topher