Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Node.js事件范围?_Node.js_Events_Scope - Fatal编程技术网

Node.js事件范围?

Node.js事件范围?,node.js,events,scope,Node.js,Events,Scope,我想使用node.js中的事件来执行一些代码;我的问题是,调用的事件代码的范围是什么?具体来说,它是共享事件调用程序的作用域,还是“隔离”?我知道我可以将参数传递给在事件上调用的代码以实现类似的效果,但理想情况下我希望调用范围可用。事件与调用程序的范围相关联。i、 e.从模块导出的EventEmitter只能用于侦听同一EventEmitter发出的事件 当您发出事件时,您将其放入队列中,稍后由节点事件系统进行处理。发出事件的作用域中的任何变量都必须作为参数传递给emit。当节点接收该事件并触发

我想使用node.js中的事件来执行一些代码;我的问题是,调用的事件代码的范围是什么?具体来说,它是共享事件调用程序的作用域,还是“隔离”?我知道我可以将参数传递给在事件上调用的代码以实现类似的效果,但理想情况下我希望调用范围可用。

事件与调用程序的范围相关联。i、 e.从模块导出的EventEmitter只能用于侦听同一EventEmitter发出的事件


当您发出事件时,您将其放入队列中,稍后由节点事件系统进行处理。发出事件的作用域中的任何变量都必须作为参数传递给
emit
。当节点接收该事件并触发所有绑定回调时,这将在不同的“clean”范围和不同的“clean”堆栈下发生。(旁注,这就是为什么节点中的堆栈跟踪会对调试造成麻烦的原因)

当您运行该命令时,它将打印“hey event fired with table 42 horse carrot 43”

var events = require('events');

var myEmitter = new events.EventEmitter();

function closure1(word, number) {
  function closure2(animal, vegetable) {
    myEmitter.emit('hey', word, number, animal, vegetable, 43);
  }
  closure2("horse", "carrot");
}

myEmitter.on('hey', function (word, number, animal, vegetable, anotherNumber) {
  console.log('hey event fired with', word, number, animal, vegetable, anotherNumber);
});
closure1("table", 42);