将全局variables传递给JavaScript中的事件callback函数?

在下面的代码中,我试图让mydata传递给callbackmydata 。 这是一个更大的问题,我有一个示例问题。 我假设这是一个范围问题。 我的代码有什么问题和/或我应该怎么做?

 var EventEmitter = require('events').EventEmitter; var myevent = new EventEmitter(); var mydata = 'my data!'; function myfunc (data, mydata) { console.log(data); console.log(mydata); }; myevent.on('data', function(data, mydata) {myfunc(data,mydata)}); myevent.emit('data', "data!"); 

收益:

 data! undefined 

我希望它回来:

 data! my data! 

       

网上收集的解决方案 "将全局variables传递给JavaScript中的事件callback函数?"

我会做一个疯狂的猜测(因为我不熟悉EventEmitter ),并说emit的第一个参数是事件的名称,其余的parameter passing给处理程序。

如果是这样的话,你不会传递任何东西到第二个callback参数,这就是为什么它是undefined 。 试试这个:

 myevent.emit('data', "data!", "mydata!"); 

注意:我忽略了你的影子问题,因为它与问题无关,只是一个不好的做法。

callback的参数列表中的参数mydata隐藏了同名的全局variables。

当你在那个位置没有传入任何参数时,它的值是undefined

或者:

  1. 更改参数的名称或
  2. 删除参数,或
  3. 传递所需的值,例如myevent.emit('data', "data!", mydata);

PS:

 myevent.on('data', function(data, mydata) {myfunc(data,mydata)}); 

最好写成:

 myevent.on('data', myfunc); 

修改后的代码:您可以访问全局variables。 从任何地方你不需要通过它作为参数。 即使你传递一个参数。 你可以使用window.mydata访问一个全局variables,因为你正在使用nodejs,你可以使用global.mydata来访问一个全局variables

 var EventEmitter = require('events').EventEmitter; var myevent = new EventEmitter(); var mydata = 'my data!'; function myfunc (data) { console.log(data); console.log(mydata); }; myevent.on('data', myfunc); myevent.emit('data', "data!");