1

在下面的代码中,我试图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!
4

3 回答 3

5

回调的参数mydata列表中的参数隐藏了同名的全局变量。

由于您在该位置未传递任何参数,因此其值为undefined.

任何一个:

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

ps:

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

最好写成:

myevent.on('data', myfunc);
于 2012-10-05T19:43:56.730 回答
3

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

如果是这种情况,您不会将任何内容传递给第二个回调参数,这就是它以undefined. 试试这个:

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

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

于 2012-10-05T19:52:54.970 回答
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!");
于 2012-10-05T19:55:17.303 回答