JSの全く新しいので、これが覚えていない場合は容赦してください。なぜ "function(value){return my_function(value);}"をnode.jsのコールバックとして記述する必要がありますか?
string-> boolをマッピングする関数fを使って文字列のリストをフィルタリングしたいとします。これは動作します:
filteredList = list.filter(function(x) { return f(x); })
これは失敗します。
filteredList = list.filter(f)
なぜ?
コード例:
~/projects/node (master)$ node
> var items = ["node.js", "file.txt"]
undefined
> var regex = new RegExp('\\.js$')
undefined
> items.filter(regex.test)
TypeError: Method RegExp.prototype.test called on incompatible receiver undefined
at test (native)
at Array.filter (native)
at repl:1:8
at REPLServer.self.eval (repl.js:110:21)
at Interface.<anonymous> (repl.js:239:12)
at Interface.EventEmitter.emit (events.js:95:17)
at Interface._onLine (readline.js:202:10)
at Interface._line (readline.js:531:8)
at Interface._ttyWrite (readline.js:760:14)
at ReadStream.onkeypress (readline.js:99:10)
> items.filter(function(value) { return regex.test(value); })
[ 'node.js' ]
>
「f」だけの場合は、違いはありません。関数をオブジェクトのメソッドとして呼び出す場合、関数が存在する可能性があります。 –