将全局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!
我会做一个疯狂的猜测(因为我不熟悉EventEmitter
),并说emit
的第一个参数是事件的名称,其余的parameter passing给处理程序。
如果是这样的话,你不会传递任何东西到第二个callback参数,这就是为什么它是undefined
。 试试这个:
myevent.emit('data', "data!", "mydata!");
注意:我忽略了你的影子问题,因为它与问题无关,只是一个不好的做法。
callback的参数列表中的参数mydata
隐藏了同名的全局variables。
当你在那个位置没有传入任何参数时,它的值是undefined
。
或者:
- 更改参数的名称或
- 删除参数,或
- 传递所需的值,例如
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!");