首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否将全局变量传递给Javascript中的事件回调函数?

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

Stack Overflow用户
提问于 2012-10-06 03:40:14
回答 3查看 4.2K关注 0票数 1

我假设这是一个范围问题。

代码语言:javascript
运行
复制
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!");

返回:

代码语言:javascript
运行
复制
data!
undefined

我想让它返回:

代码语言:javascript
运行
复制
data!
my data!
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-06 03:52:55

我将胡乱猜测一下(因为我不熟悉EventEmitter),假设emit的第一个参数是事件的名称,其余的参数被传递给处理程序。

如果是这种情况,您不会向第二个回调参数传递任何内容,这就是它作为undefined传入的原因。试着这样做:

代码语言:javascript
运行
复制
myevent.emit('data', "data!", "mydata!");

注意:我忽略了您的隐藏问题,因为它与问题无关,只是一种糟糕的做法。

票数 3
EN

Stack Overflow用户

发布于 2012-10-06 03:43:57

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

因为您没有在该位置传递任何参数,所以它的值为undefined

以下任一项:

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

附言:

代码语言:javascript
运行
复制
myevent.on('data', function(data, mydata) {myfunc(data,mydata)});

最好写成:

代码语言:javascript
运行
复制
myevent.on('data', myfunc);
票数 5
EN

Stack Overflow用户

发布于 2012-10-06 03:55:17

修改代码:可以访问全局变量。从任何地方你都不需要把它作为参数传递。即使你传递了一个参数。由于您使用的是nodejs,因此可以使用global.mydata访问全局变量,因此可以使用window.mydata访问全局变量

代码语言:javascript
运行
复制
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!");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12752985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档