Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在函数中运行代码,就像它在另一个作用域中运行一样_Javascript_Node.js_Events - Fatal编程技术网

Javascript 在函数中运行代码,就像它在另一个作用域中运行一样

Javascript 在函数中运行代码,就像它在另一个作用域中运行一样,javascript,node.js,events,Javascript,Node.js,Events,下面是基于Node.js的音乐播放器的一些示例代码。该示例只是让玩家播放一些通过命令行传递的文件: for (var i = 2; i < process.argv.length; i += 1) { batch.push(openFileFn(process.argv[i])); } for(变量i=2;i

下面是基于Node.js的音乐播放器的一些示例代码。该示例只是让玩家播放一些通过命令行传递的文件:

for (var i = 2; i < process.argv.length; i += 1) {
  batch.push(openFileFn(process.argv[i]));
}
for(变量i=2;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!
}
函数播放(){
对于(变量i=2;i
我已经通过在我的调试器中设置断点来验证play函数是否被调用,所以我唯一能想到的另一件事是,函数在某种程度上被改变的作用域搞砸了。如何在所需范围内调用
play()


下面是所有代码的GitHub要点:

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

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


解决此问题的通常方法是创建独立的函数,这些函数不依赖于其他全局状态或其他作用域中的状态。如果它们创建/初始化自己的状态或它们应该使用的已传递状态(或两者的某种组合),则可以从任何位置调用它们。

关于批处理
,您可能是对的,但我不能稍后声明它,因为它也有附加到它的事件侦听器。我会在github gist上发布代码。