繁体   English   中英

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

[英]Pass global variable to on event callback function in Javascript?

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

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

当您在该位置没有传递参数时,其值是undefined

要么:

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

ps:

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

最好写成:

myevent.on('data', myfunc);

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

如果是这样,您就不会传递任何东西给第二个回调参数,这就是为什么它以undefined 试试这个代替:

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

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

修改后的代码:您可以访问全局变量。 从任何地方都不需要将其作为参数传递。 即使您传递参数。 您可以通过访问一个全局变量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!");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM