在函数中运行代码,就好像它在另一个范围内运行一样

时间:2014-09-30 06:01:31

标签: javascript node.js events

我正在关注基于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函数,所以我唯一能想到的是该函数以某种方式被更改的范围搞砸了。如何在所需范围内调用play()

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

1 个答案:

答案 0 :(得分:1)

从较低的范围调用play()之类的函数是没有问题的。在这两种情况下都可以访问该功能。所以,这不仅仅是关于范围。

因此,问题更可能是时间和函数所依赖的其他变量的状态。例如,变量batch必须处于适当的状态,以使您的函数play()能够执行它应该执行的操作。我的猜测是,当您进行第二次函数调用时,该变量或openFileFn()所依赖的内容都不是正确的状态。

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

相关问题