2014-09-30 61 views
0

我正在关注基于Node.js的音乐播放器的一些示例代码。这个例子只是一直在播放器上播放的命令行上传递的一些文件:运行代码的功能就好像它在另一个范围内运行

for (var i = 2; i < process.argv.length; i += 1) { 
    batch.push(openFileFn(process.argv[i])); 
} 

我想改变它,这样的代码只玩的东西时,另一事件发生时运行。我试图通过将上面的代码包装在一个函数中并从我的事件处理程序调用它来完成此操作。不幸的是,没有任何反应,当我这样做的:

function play() { 
    for (var i = 2; i < process.argv.length; i += 1) { 
    batch.push(openFileFn(process.argv[i])); 
    } 
} 
play(); // Works 

function eventHandeler() { 

    // Other code 
    play(); // Doesn't work! 
} 

我已验证的播放功能得到通过我的调试器设置断点调用,所以我能想到的唯一的另一件事是,函数是莫名其妙被改变的范围弄乱了。我如何在所需范围内拨打play()

这里有一个GitHub的要点与所有代码:https://gist.github.com/anonymous/01f9572e73cdf3103e7b

回答

1

有没有问题,呼吁像play()从一个较低的范围功能。这两种情况下都可以使用该功能。所以,这不完全是关于范围。

所以,这个问题更可能是函数所依赖的其他变量的时间和状态之一。例如,变量batch必须处于您的功能play()所需的适当状态。我的猜测是,当您进行第二次函数调用时,该变量或openFileFn()依赖于的变量不在正确的状态。

解决此问题的常用方法是创建独立的函数,并且不依赖于其他范围中的其他全局状态或状态。如果他们创建/初始化他们自己的状态或者通过他们应该使用的状态(或两者的某种组合),那么他们可以从任何地方被调用。

+0

对于'batch'你可能是对的,但我不能在以后声明它,因为它也有附加到它的事件监听器。我会在github的要点上发布代码。 – BonsaiOak 2014-09-30 06:24:10

相关问题