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の最初のパラメーターはイベントの名前であり、残りのパラメーターはハンドラーに渡されます。

その場合、2 番目のコールバック パラメータに何も渡していないため、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 に答える