2017-08-29 45 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

相关问题