将全局变量传递给Javascript中的事件回调函数?

Ehe*_*Tov 1 javascript scope node.js eventemitter

在下面的代码中,我试图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!");
Run Code Online (Sandbox Code Playgroud)

收益:

data!
undefined
Run Code Online (Sandbox Code Playgroud)

我希望它能回归:

data!
my data!
Run Code Online (Sandbox Code Playgroud)

Aln*_*tak 5

该参数mydata在回调的参数列表隐藏着同一个名字的全局变量.

当你在那个位置没有传递参数时,它的值是undefined.

或者:

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

PS:

myevent.on('data', function(data, mydata) {myfunc(data,mydata)});
Run Code Online (Sandbox Code Playgroud)

会写得更好:

myevent.on('data', myfunc);
Run Code Online (Sandbox Code Playgroud)

  • 3.在emit调用上传递参数 (2认同)