在下面的代码中,我试图将mydata
传递给回调。这是我遇到的更大问题的示例问题。我假设这是一个范围问题。我的代码有什么问题和/或我应该怎么做?
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!
答案 0 :(得分:5)
回调参数列表中的参数mydata
隐藏了同名的全局变量。
在该位置没有传递任何参数时,其值为undefined
。
或者:
myevent.emit('data', "data!", mydata);
P.S:
myevent.on('data', function(data, mydata) {myfunc(data,mydata)});
会更好地写成:
myevent.on('data', myfunc);
答案 1 :(得分:3)
我要做一个疯狂的猜测(因为我不熟悉EventEmitter
)并说emit
的第一个参数是事件的名称,其余参数通过处理程序。
如果是这种情况,则不会将任何内容传递给第二个回调参数,这就是undefined
的原因。试试这个:
myevent.emit('data', "data!", "mydata!");
注意:我忽略了你的阴影问题,因为它与问题无关,只是一种不好的做法。
答案 2 :(得分:2)
修改后的代码:您可以访问全局变量。从任何地方你都不需要将它作为参数传递。即使你传递参数。您可以使用window.mydata
访问全局变量,因为您使用的是nodejs,您可以使用global.mydata
访问全局变量
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!");