Javascript RequireJS某些(并非所有)函数未定义

Javascript RequireJS某些(并非所有)函数未定义,javascript,requirejs,craftyjs,Javascript,Requirejs,Craftyjs,我不确定有没有人能帮上忙,但事情是这样的。我目前正在重构一个使用RequireJS编写的游戏(一个优秀的基于组件的游戏引擎)。一切都进行得很顺利,但突然我遇到了困难。我构建了一个模块,在其中我定义了一个小的狡猾的组件,它基本上只是事件侦听的瓶颈。在其中一个回调中,我调用了本地模块中定义的几个函数。我在很多场合下都在RequireJS中使用过这种模式,它对我一直都很有效。出于某种原因,在这种情况下,有些函数是未定义的。不是所有的。只是一些。下面是一些代码: 组成部分: Crafty.c("Turn

我不确定有没有人能帮上忙,但事情是这样的。我目前正在重构一个使用RequireJS编写的游戏(一个优秀的基于组件的游戏引擎)。一切都进行得很顺利,但突然我遇到了困难。我构建了一个模块,在其中我定义了一个小的狡猾的组件,它基本上只是事件侦听的瓶颈。在其中一个回调中,我调用了本地模块中定义的几个函数。我在很多场合下都在RequireJS中使用过这种模式,它对我一直都很有效。出于某种原因,在这种情况下,有些函数是未定义的。不是所有的。只是一些。下面是一些代码:

组成部分:

Crafty.c("TurnStateMachineObserver", {
    startListening: function() {
...
        this.bind(POST+PHASE_CHANGE, function(e) {
            // this is called after the phase change has already been 
            // applied. now, switch to the next phase, if appropriate.

            var curPhase = currentPhase();
            var nextPhase = nextPhase();

            if (nextPhase === PHASE_TURN_START)
                _triggerPlayerChange(nextPlayer());
            else if (curPhase !== PHASE_MAIN)
                _triggerPhaseChange(nextPhase());
        })
        .bind(POST+RESET, function(e) {
            reset();
        });
    },
...
});
对于那些不熟悉Crafty的人,
Crafty.c
会创建一个组件,稍后可以实例化该组件。作为第二个参数传递的对象文字将附加(扩展?)到任何对象,该对象包括
TurnStateMachineObserver
作为其组件之一(即使用
Crafty.e(“TurnStateMachineObserver”)

组件内部使用的函数稍后在同一文件中定义(整个文件包装在
define()
调用中):


init
函数(模块返回)中,定义了
nextPhase()
,但是如果我进入
\u observer.startListening()
,它不是,尽管
currentPhase()
是。啊!我把剩下的头发都拔出来了。让我感到困惑的是,这些函数是兄弟函数。如何定义更高范围内的某些函数而不定义其他函数

哇,笨蛋。显然,问题是我用变量覆盖了函数。当我把它改成

...
var curPhaseVal = currentPhase();
var nextPhaseVal = nextPhase();
...

突然间,一切正常。这本应该是一个不需要动脑筋的问题,但我还是花了一个星期才找到。好吧,回去工作吧

哇,笨蛋。显然,问题是我用变量覆盖了函数。当我把它改成

...
var curPhaseVal = currentPhase();
var nextPhaseVal = nextPhase();
...
突然间,一切正常。这本应该是一个不需要动脑筋的问题,但我还是花了一个星期才找到。好吧,回去工作吧

...
var curPhaseVal = currentPhase();
var nextPhaseVal = nextPhase();
...