我正在关注基于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

最佳答案

从较低范围调用像play()这样的函数没有问题。在两种情况下都可以使用该功能。因此,这不仅仅涉及范围。

因此,问题很可能是功能所依赖的时间和其他变量的状态之一。例如,变量batch必须处于适当的状态,才能使函数play()正常工作。我的猜测是,当您进行第二个函数调用时,该变量或openFileFn()所依赖的东西未处于正确的状态。

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

关于javascript - 在函数中运行代码,就像在另一个作用域中运行一样,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26113796/

10-14 17:49
查看更多